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

 
 
 
Reply to this topicStart new topic
> создание регистровых переменных в WINAVR
stapleman
сообщение Aug 10 2009, 13:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



Здравствуйте.
Проблема заключается в следующем:
в winavr создал регистровую глобальную переменую
register uint8_t qqq asm ("r5");
внутри прерывания сначала шлю значение по усарту
USART0TxByte(qqq);
потом пытаюсь вычесть из нее единицу
asm volatile ( "dec r5 \n\t":smile.gif;
и шлю еще раз
USART0TxByte(qqq);
А на компе вижу, что значение не меняется.
Скажите пожалуйста, что не так.
P.S. Оптимизация равняется 3.
Go to the top of the page
 
+Quote Post
aesok
сообщение Aug 10 2009, 13:24
Сообщение #2


Знающий
****

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



Вы не указали компилятору что r5 изменяется в ассемблерной вставке.

Цитата
Clobbers
As stated previously, the last part of the asm statement, the list of clobbers, may be omitted, including the colon seperator. However, if you are using registers, which had not been passed as operands, you need to inform the compiler about this...


Анатолий.

Сообщение отредактировал aesok - Aug 10 2009, 13:25
Go to the top of the page
 
+Quote Post
stapleman
сообщение Aug 11 2009, 07:17
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



Цитата(aesok @ Aug 10 2009, 17:24) *
Вы не указали компилятору что r5 изменяется в ассемблерной вставке.

Здравствуйте.
Мне кажется, что дело не в этом. Так в листинге строка:" dec r5 ", присутствует.
Go to the top of the page
 
+Quote Post
ARV
сообщение Aug 11 2009, 18:35
Сообщение #4


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



а почему вообще не сделать qqq--; ???


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Aug 11 2009, 20:24
Сообщение #5


Местный
***

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



Цитата(stapleman @ Aug 11 2009, 11:17) *
Так в листинге строка:" dec r5 ", присутствует.

Еще бы ее не было после asm volatile smile.gif
Анатолий все верно говорит - компилятор пользуется не самой переменной, а ее копией. И надо ему сообщить, что копия устарела. Только не пытайтесь объявлять регистровую переменную с квалификатором volatile - GCC почему то с таким вариантом не работает нормально.
Go to the top of the page
 
+Quote Post

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

 


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


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