Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ассемблерные вставки в IAR-е
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Oleg_IT
В ассемблерных вставках IAR не видит ни имена портов, ни имена переменных. Что нужно сделать, что бы это заработало?
solidreg
Я просто адресс ставляю в место константы. Иначе я не смог обойте этого.
Oleg_IT
Цитата(solidreg @ Oct 31 2005, 16:55)
Я просто адресс ставляю в место константы. Иначе я не смог обойте этого.
*


???? Адрес порта я ещё понимаю, но адрес переменной. Как я узнаю, по какому адресу компилятор данную переменную расположил? Я понял так, что мне в код конкретное число ставить нужно, т.е. адрес? Или не так?
solidreg
Цитата(Oleg_IT @ Oct 31 2005, 16:08)
???? Адрес порта я ещё понимаю, но адрес переменной. Как я узнаю, по какому адресу компилятор данную переменную расположил?
*


Если работаете с регистрами (портами) - да, укажите адрес. А переменных из С програмы вы не сможете включить в ASM.
Обойти это можно обявляя новую функцию с параметрами, и эту функцию пишить ASM. Параметры функции (переменные от С) передаётся в регистрах CPU. Какие параметры и в каких регистрах передаётся смотрите в PDF'e IAR'a.
Oleg_IT
С функциями проще. Но у меня прерывания. Как с ними быть?
Обработчик на С:
#pragma vector = USART_RXC_vect
__interrupt void UsartReceive(void)
{//4 cycles to jmp in IRQ_Handler
__asm{
"PUSH R7 \n"
"IN R7,UCSRB \n"
"PUSH R29 \n"
"IN R29,UCSRA \n"
"PUSH R6 \n"
"PUSH R5 \n"
………………………….
}
}
Как тут быть с переменными и именами портов? Помогите, не бросайте новичка.
Виктория
Олег, напишите подобную функцию на Си (естественно переменные должны быть статические) и посмотрите сами в листинге asm-ного файла как компилятор обзывает (обращается) к этим переменным. То же и с портами.
m16
Oleg_IT

AVR034: Mixing C and Assembly Code with AVR Embedded Workbench for AVR

это спасет отца русской демократии?
Oleg_IT
Спасибо всем. Буду работать.... над собойsmile.gif
Oleg_IT
Ещё вопрос по теме.
Как из *.h файла сделать *.inc файл, автоматически? Уж больно не охота ручками писать, ещё ошибок наделаю.
IgorKossak
Цитата(Oleg_IT @ Oct 31 2005, 15:11)
В ассемблерных вставках IAR не видит ни имена портов, ни имена переменных. Что нужно сделать, что бы это заработало?
*

Если ассемблерная вставка делается в С-файле, то на неё распространяются правила С-файла.
А именно в настройках проекта Options\General\Library Configuration надо установить галочку в поле Enable bit definitions in I/O-Include files.
Или в текущем С-файле обьявить:
#define ENABLE_BIT_DEFINITIONS
Oleg_IT
В asm не работает такая запись
CBI PORTC,PU_TRX
Компилятор пишет
Error[50]: Undefined symbol:'PORTC_Bit6' ……\ATR2406\SOFT\rf_ctrl_asm.asm 113

В файле определения есть строка
#define PU_TRX PORTC_Bit6

В оригинальном файле для CodeVisionAVR было так
#define PU_TRX PORTC.6
IgorKossak
Цитата(Oleg_IT @ Nov 2 2005, 13:24)
В asm не работает такая запись
      CBI PORTC,PU_TRX
Компилятор пишет
Error[50]: Undefined symbol:'PORTC_Bit6' ……\ATR2406\SOFT\rf_ctrl_asm.asm 113

В файле определения есть строка
#define PU_TRX  PORTC_Bit6

В оригинальном файле для CodeVisionAVR было так
#define PU_TRX PORTC.6
*

Измените определение:
#define PU_TRX PC6
Oleg_IT
Спасибо, работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.