реклама на сайте
подробности

 
 
> Как сделать смешаный проект?, С *.c и *.asm файлами
777777
сообщение Apr 30 2008, 04:22
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



И calling convention я нигде не найду sad.gif
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
MrYuran
сообщение Apr 30 2008, 05:01
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



А вчём проблема?
посмотрите примеры из состава GCC, заодно и мэйк файл готовый можно взять


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 30 2008, 05:38
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(MrYuran @ Apr 30 2008, 09:01) *
А в чём проблема?

Проблема в том, что если я тупо включаю в проект .asm файл, то он не транслируется.
Цитата(MrYuran @ Apr 30 2008, 09:01) *
посмотрите примеры из состава GCC, заодно и мэйк файл готовый можно взять

Да где его найти-то? Все что там есть - это demo, largedemo и stdiodemo. И вообще, как-то туго у них с документацией: в gcc.pdf описан чисто С, а в avr-libc-user-manual - стандартные библиотеки. Где описание всего того, что индивидуально именно для AVR? В частности, calling convention - без него нет смысла писать ассемблерные функции.
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 30 2008, 06:38
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(777777 @ Apr 30 2008, 09:38) *
Где описание всего того, что индивидуально именно для AVR? В частности, calling convention - без него нет смысла писать ассемблерные функции.


В avr-libc-user-manual.

Анатолий.

Цитата(777777 @ Apr 30 2008, 09:38) *
Да где его найти-то? Все что там есть - это demo, largedemo и stdiodemo.


Есть еще asmdemo.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 30 2008, 08:55
Сообщение #5


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Возможно, Вам надо отредактировать makefile в плане подключения исходных текстов на ассемблере и ключей запуска для ассемблера. Кажется, в makefile в текущей версии не все поправили в флагах. Посмотрите bugreports на предыдущие выпуски Winavr. Где-то были сообщения о флагах. И еще, прототипы функций в *.с должны быть указаны.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 30 2008, 09:19
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Кое-что начало получаться (хотя и не все sad.gif ), но главная проблема, которую я увидел - ассемблерный файл транслируется вовсе не AVR-овским ассемблером. Подозреваю что это транслятор, который берет промежуточный ассемблерный файл, который получается после компиляци C-файла. Он не понимает никаких директив - ни .equ, ни .def

PS. А без мейкфайла, непосредственно в IDE нельзя указать что файл является ассемблерным?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 30 2008, 09:30
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(777777 @ Apr 30 2008, 12:19) *
Подозреваю что это транслятор, который берет промежуточный ассемблерный файл, который получается после компиляци C-файла.

после компиляции с-файла получается объектный файл, не имеющий ничего общего с ассемблером
Цитата
PS. А без мейкфайла, непосредственно в IDE нельзя указать что файл является ассемблерным?

Какая ИДЕ?
мэйк-файл нужен по любому, только формируете его либо вы (как вам надо), либо оболочка (как посчитает нужным)
на ассемблерность файла указывает его расширение (.s)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 30 2008, 09:36
Сообщение #8


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(777777 @ Apr 30 2008, 13:19) *
PS. А без мейкфайла, непосредственно в IDE нельзя указать что файл является ассемблерным?

Я использую Eclipce и правлю makefile только руками (типа все под контролем). AVRStudio что-то плодит, но в своем духе и разбираться желания не было.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 30 2008, 09:59
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(MrYuran @ Apr 30 2008, 13:30) *
после компиляции с-файла получается объектный файл, не имеющий ничего общего с ассемблером

Не факт. Помнится, в юниксе на ЭВМ smile.gif СМ-4 c-шный компилятор создавал сначала ассемблерный файл, причем именно с расширением .s, а из него уже получал объектный. Скоре всего gcc тоже генерирует сначала ассемблерный файл и сразу передает его транслятору.
Цитата(MrYuran @ Apr 30 2008, 13:30) *
Какая ИДЕ?
мэйк-файл нужен по любому, только формируете его либо вы (как вам надо), либо оболочка (как посчитает нужным)

Да это понятно. Я и имел в виду - генерировать его из ИДЕ с помощью флажков. Впрочем, мне это уже удалось
Цитата(MrYuran @ Apr 30 2008, 13:30) *
на ассемблерность файла указывает его расширение (.s)

Увы. Кроме того, удалось догадаться о наличии в этом ассемблере директивы .global smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 30 2008, 10:34
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(777777 @ Apr 30 2008, 12:19) *
но главная проблема, которую я увидел - ассемблерный файл транслируется вовсе не AVR-овским ассемблером.
Хм... а каким? Возможно, вы имели ввиду атмеловский AvrAssembler? Так и не должен - у avr-gcc есть собственный ассемблер, с собственным синтаксисом. Документация в Doc/binutils/as.
Цитата(777777 @ Apr 30 2008, 12:59) *
Не факт.
Да, это не факт. Это больше, чем факт - так оно и есть на самом деле. gcc в обычном режиме передает ассемблерный текст от компилятора к ассемблеру через pipe, т.е. файл на диске не создается. Вы можете попросить его создать такой файл, но это уже из другой оперы. А выходом уже ассемблера является объектный файл, но поскольку промежуточное ассемблирование вызывается неявно, снаружи выглядит так, что выходом компилятора является объектный файл. Поправьте меня кто-нибудь, если я не прав.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 30 2008, 11:23
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Сергей Борщ @ Apr 30 2008, 14:34) *
Хм... а каким? Возможно, вы имели ввиду атмеловский AvrAssembler?

Ну да, конечно.
Цитата(Сергей Борщ @ Apr 30 2008, 14:34) *
Так и не должен - у avr-gcc есть собственный ассемблер, с собственным синтаксисом.

И наверное с собственным форматом объектных файлов.
Цитата(Сергей Борщ @ Apr 30 2008, 14:34) *
Документация в Doc/binutils/as.

О, вот это ценная вещь. И директива .global там действительно есть smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 30 2008, 12:25
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(777777 @ Apr 30 2008, 14:23) *
И наверное с собственным форматом объектных файлов.
Естественно. А зачем его скрещивать с атмеловским ассемблером? avr-gcc представляет собой законченный набор инструментов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
777777
сообщение May 1 2008, 11:45
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



В общем, все получилось за исключением одной "мелочи". В регистр Z надо поместить адрес таблицы, находящейся в памяти программ. Для этого надо его умножить на 2 и взять старшую и младшую часть. Но этот ассемблер, похоже, не позволяет выражений над перемещаемыми символами. Может таблицу надо поместить в какую-нибудь другую секцию?
Go to the top of the page
 
+Quote Post
InsolentS
сообщение May 3 2008, 20:23
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Пишу так
Код
                EXPORT  Test
                EXTERN  func1

                AREA    |.text|, CODE, READONLY

Test
                LDR     R0, =func1
                BX      R0

                END

Линкер говорит что не может найти func1 , хотя вот так
Код
                EXPORT  Test
                EXTERN  _Z5func1v

                AREA    |.text|, CODE, READONLY

Test
                LDR     R0, =_Z5func1v
                BX      R0

                END

работает, но это бред. Как правильно?
Компилер RV


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 3 2008, 20:54
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



ИМХО, правильнее было бы так:
Код
                EXPORT  Test
                IMPORT  func1

                AREA    |.text|, CODE, READONLY

Test
                LDR     R0, =func1
                BX      R0

                END

Но у меня компилятор не ругается и в случае использования EXTERN.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01514 секунд с 7
ELECTRONIX ©2004-2016