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

 
 
 
Reply to this topicStart new topic
> Ассемблерные вставки в IAR-е, Видимость переменных
Oleg_IT
сообщение Oct 31 2005, 12:11
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



В ассемблерных вставках IAR не видит ни имена портов, ни имена переменных. Что нужно сделать, что бы это заработало?
Go to the top of the page
 
+Quote Post
solidreg
сообщение Oct 31 2005, 12:55
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056



Я просто адресс ставляю в место константы. Иначе я не смог обойте этого.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Oct 31 2005, 13:08
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(solidreg @ Oct 31 2005, 16:55)
Я просто адресс ставляю в место константы. Иначе я не смог обойте этого.
*


???? Адрес порта я ещё понимаю, но адрес переменной. Как я узнаю, по какому адресу компилятор данную переменную расположил? Я понял так, что мне в код конкретное число ставить нужно, т.е. адрес? Или не так?
Go to the top of the page
 
+Quote Post
solidreg
сообщение Oct 31 2005, 16:17
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056



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


Если работаете с регистрами (портами) - да, укажите адрес. А переменных из С програмы вы не сможете включить в ASM.
Обойти это можно обявляя новую функцию с параметрами, и эту функцию пишить ASM. Параметры функции (переменные от С) передаётся в регистрах CPU. Какие параметры и в каких регистрах передаётся смотрите в PDF'e IAR'a.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Nov 1 2005, 11:58
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



С функциями проще. Но у меня прерывания. Как с ними быть?
Обработчик на С:
#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"
………………………….
}
}
Как тут быть с переменными и именами портов? Помогите, не бросайте новичка.
Go to the top of the page
 
+Quote Post
Виктория
сообщение Nov 1 2005, 12:09
Сообщение #6


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Олег, напишите подобную функцию на Си (естественно переменные должны быть статические) и посмотрите сами в листинге asm-ного файла как компилятор обзывает (обращается) к этим переменным. То же и с портами.
Go to the top of the page
 
+Quote Post
m16
сообщение Nov 1 2005, 13:30
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225



Oleg_IT

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

это спасет отца русской демократии?
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Nov 1 2005, 16:46
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Спасибо всем. Буду работать.... над собойsmile.gif
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Nov 1 2005, 16:59
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Ещё вопрос по теме.
Как из *.h файла сделать *.inc файл, автоматически? Уж больно не охота ручками писать, ещё ошибок наделаю.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 2 2005, 09:56
Сообщение #10


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Oleg_IT @ Oct 31 2005, 15:11)
В ассемблерных вставках IAR не видит ни имена портов, ни имена переменных. Что нужно сделать, что бы это заработало?
*

Если ассемблерная вставка делается в С-файле, то на неё распространяются правила С-файла.
А именно в настройках проекта Options\General\Library Configuration надо установить галочку в поле Enable bit definitions in I/O-Include files.
Или в текущем С-файле обьявить:
#define ENABLE_BIT_DEFINITIONS
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Nov 2 2005, 10:24
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



В 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
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 2 2005, 10:31
Сообщение #12


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(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
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Nov 2 2005, 11:25
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Спасибо, работает.
Go to the top of the page
 
+Quote Post

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

 


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


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