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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как сделать смешаный проект?, С *.c и *.asm файлами
InsolentS
сообщение May 3 2008, 21:18
Сообщение #16


Местный
***

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



Хмм..в случае с Си действительно работает. А как же тогда смешивать асм с С++ кодом?


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
xelax
сообщение May 4 2008, 05:46
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(Сергей Борщ @ Apr 30 2008, 14:34) *
Да, это не факт. Это больше, чем факт - так оно и есть на самом деле. gcc в обычном режиме передает ассемблерный текст от компилятора к ассемблеру через pipe, т.е. файл на диске не создается.


Наблюдал во время сборки проекта с помощью arm-elf-gcc в папке, расположенной в Documents and Settings создаётся ассемблерный файл наборсимволов.S

Работаю в винде ХР
Go to the top of the page
 
+Quote Post
meister
сообщение May 4 2008, 05:51
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(InsolentS @ May 4 2008, 01:18) *
Хмм..в случае с Си действительно работает. А как же тогда смешивать асм с С++ кодом?


extern "C" int funciya_is_cpp_faila(int);

или

extern "C"
{
int funciya_is_cpp_faila(int);
}

Почитайте про манглинг, extern "C" и вообще про C++.
Go to the top of the page
 
+Quote Post
777777
сообщение May 4 2008, 11:03
Сообщение #19


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

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



Цитата(InsolentS @ May 4 2008, 00:23) *
Пишу так
Код
                LDR     R0, =func1
                BX      R0

Что это за LDR, BX? Я имею в виду 8-разрядный AVR. В нем для обращения к памяти программ нужно в два регистра записать адрес программной памяти, умноженный на 2, в один регистр младшую часть этого выражения, а в другой старшую. А компилятор WinAVR ругается н алюбые выражения над пеемещаемыми символами.
Go to the top of the page
 
+Quote Post
aesok
сообщение May 4 2008, 11:46
Сообщение #20


Знающий
****

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



Цитата(777777 @ May 4 2008, 15:03) *
В нем для обращения к памяти программ нужно в два регистра записать адрес программной памяти, умноженный на 2, в один регистр младшую часть этого выражения, а в другой старшую. А компилятор WinAVR ругается н алюбые выражения над пеемещаемыми символами.


Опишите задачу которую хотите решить, приведите код который у вас не работает и ошибки котрые выдает ассемблер/линкер.

Анатолий.
Go to the top of the page
 
+Quote Post
777777
сообщение May 4 2008, 13:02
Сообщение #21


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

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



Цитата(aesok @ May 4 2008, 15:46) *
Опишите задачу которую хотите решить, приведите код который у вас не работает и ошибки котрые выдает ассемблер/линкер.

Задача простая: получить данные из памяти программ:

Код
            ldi        r30, (Table*2)&0xff
            ldi        r31, ((Table*2)>>8)&0xff
            lpm

Table:        .byte        1, 2, 3

Результат:

Error: invalid sections for operation on `Tbl' and `L0'

Возможно для gnu-того ассемблера такие таблицы следует помещать в какую-то особенную секцию, но в хелпе я ничего не нашел.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 4 2008, 19:42
Сообщение #22


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



GNU as для AVR поддерживает байтовую адресацию флеша, поэтому умножать на 2 не надо.
Для старшего/младшего байта есть модификаторы:
Код
    ldi        r30, lo8(Table)
    ldi        r31, hi8(Table)
    lpm


Если нужен адрес функции, то тогда надо бы делить на два, есть модификатор pm() и pm_lo8()/pm_hi8()
Сверх этого мне нужны были только разности перемещаемых величин для получения абсолютной (длина таблицы) или сумма/разность перемещаемой и абсолютной величин для получения смещённого относительно метки значения. Больше мне не было нужно, даже не знаю, насколько вольно он позволяет жонглировать перемещаемыми величинами.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_Pasha
сообщение May 29 2008, 13:25
Сообщение #23


;
******

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



Пока большинство с успехом пользуется С, у меня проблема на проблеме. smile.gif
Пользуюсь AVRstudio + GCC plugin
Цитата
AVR Studio 4.13.571 Service Pack 2
Plugins:
AvrPluginAvrAsmObject 1, 0, 0, 46
AvrPluginavrgccplugin 1, 0, 0, 9


Пишу обработчик прерывания на асме

Код
.section .text
.global TIMER1_OVF_vect
TIMER1_OVF_vect:
push r15
..........do something.......
pop  r15
reti


Плагин автоматом рожает Makefile, который меня вроде устраивает.
Прилагаю на всякий случай.
После компиляции наблюдаю присутствие вектора _vector_20 в файле *.lss
Все нормально? Хрен!
При запуске в студии не могу отладить свое прерывание. Тамошний дизассемблер говорит, что такого вектора нет!
Кто собирал смешанные проекты с отладкой на последней версии студии - отзовитесь! Нормально ли там получается отлаживать асмы?

З.Ы. Проблему решил костылем:
Код
// это в ассемблерном файле
.section .text
.global tov1_proc
tov1_proc:
push r15
.................
pop  r15
ret


//это в сишном
ISR(TIMER1_OVF_vect,ISR_NAKED)
{
tov1_proc();
reti();
}


Как бы это покультурнее выразиться ...
Go to the top of the page
 
+Quote Post
singlskv
сообщение May 29 2008, 15:33
Сообщение #24


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(_Pasha @ May 29 2008, 17:25) *
Плагин автоматом рожает Makefile, который меня вроде устраивает.
Прилагаю на всякий случай.
После компиляции наблюдаю присутствие вектора _vector_20 в файле *.lss
Все нормально? Хрен!
При запуске в студии не могу отладить свое прерывание. Тамошний дизассемблер говорит, что такого вектора нет!

вызов _vector_20 при этом в __vectors есть ?
если есть, то для отладки по асм коду ищите опцию AS -gstabs
если нету то и не все OK ...

проще всего выложите полный(минимальный) проект.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 03:24
Рейтинг@Mail.ru


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