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

 
 
> создание регистровых переменных в 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
 
Start new topic
Ответов
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



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

 


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


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