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

 
 
> Как в 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, 07:06
Сообщение #2


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

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



Читал и FAQ 1 и ваш коментарий, но тода получается что что то не допонял что там написано.

Поясните пожалуйста как происходит и как сделать так что бы компилятор имменно там разместил переменную.
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 24 2009, 07:22
Сообщение #3


Знающий
****

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



Цитата(IgorAVR2 @ Apr 24 2009, 11:06) *
Читал и FAQ 1 и ваш коментарий, но тода получается что что то не допонял что там написано.

Поясните пожалуйста как происходит и как сделать так что бы компилятор имменно там разместил переменную.


Размещаете переменную Вы правильно, только Вы не учитывате тот момент, что GCC это оптимизизирующий С компилятор.
Вот он и отимизирует код:
counter=5;
temp=counter;
в:
temp=5;

Ведь далее в этой функции переменная 'counter' не используеться, правильно? Так зачем выполнять лишнию пересылку? А что Вы там написали на ассемблере и как используете переменную counter компилятор C не знает и не учитывает.

Доля того чтобы указать компилятору чтобы он не оптимизировал доступ к переменной служет модификатор "volatile".

Это для обычных переменных, но GCC иногда теряет модификатор "volatile" для регистровых переменных, и последнии версии выдают предупреждение когда компилируют код с такими переменными.

Анатолий.
Go to the top of the page
 
+Quote Post

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


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

 


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


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