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

 
 
> Как в WinAVR разместить переменную в регистре?
IgorAVR2
сообщение Apr 24 2009, 06:28
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 29-05-08
Пользователь №: 37 901



Или как из Си winavr писать данные в нужный регистр?

register unsigned char counter asm("r4"); - не помогает!!!

То есть если пишем код:
register unsigned char counter asm("r4");
counter=5;
temp=counter;

то в дизасме видно, что переменную в r4 он не создаёт и естественно не присваивает r4=5 , а просто в temp загружает 5.

Мне нужно из Си писать в регистр и постоянно держать там эти данные, что бы постоянно использовать в прерывании, которое на Асме.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IgorAVR2
сообщение Apr 24 2009, 10:34
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 29-05-08
Пользователь №: 37 901



Попробуйте пожалуйста объяснить ещё, я не тупой должен понять... Тем более в книгах по Си я вряд ли это найду, уверен. Перерыл вчера весь инет и нечего подобного нету, никто кроме вас не знает.

И как же всё таки сделать, что бы такие переменные всегда там создавались, даже если не используються дальше в программе, а просто присваивается им значение?
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 24 2009, 11:11
Сообщение #3


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

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



Цитата(IgorAVR2 @ Apr 24 2009, 14:34) *
И как же всё таки сделать, что бы таки переменные всегда там создавались, даже если не используються дальше в программе, а просто присваивается им значение?


Компилятор оптимизирующий и имеет право выкидывать неиспользуемый код. Кстати, если у Вас не включены почти все предупреждения, то Вы много интересной информации о результатах компиляции упускаете.
Выдержка из моего makefile
Код
CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes
CFLAGS += -Wundef
CFLAGS += -Wunreachable-code
#CFLAGS += -Wsign-compare
CFLAGS += -Wvolatile-register-var
CFLAGS += -Wunused
CFLAGS += -Wextra


Я использовал назначения регистровых переменных для работы с прерываниями, правда только на С, и переменные явно использовались.
Код
register uint8_t     curdata                    asm("r7");    // r7
register uint8_t     baudr                    asm("r6");    // r6
register uint8_t     val_baud                asm("r5");    // r5
volatile register     uint8_t flag            asm("r4");    // r4
volatile register     uint16_t txd_Tail               asm("r2");    // r2, r3

Будьте внимательны, список доступных к использованию регистров зависит от версии Winavr.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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