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

 
 
> "Глюки" в WinAVR 20070122 и борьба с ними
manul78
сообщение May 14 2007, 19:00
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Обясните пожалуйста как такое можно реализовать ?

Это функция:

void Control_ACK(void) {

while (x ==0) ;
if (Kbuff==0xFA) {WriteData(0x18);Beep(5000);Kbuff=0;x=0; }
else {WriteData(0x1E);Beep(5000);Kbuff=0;x=0; } }

Это результат :

void Control_ACK(void) {

while (x ==0) ;
12a: 80 91 62 00 lds r24, 0x0062
12e: 88 23 and r24, r24
130: f1 f3 breq .-4 ; 0x12e <Control_ACK+0x4>


if (Kbuff==0xFA) {WriteData(0x18);Beep(5000);Kbuff=0;x=0; }
132: 80 91 63 00 lds r24, 0x0063
136: 8a 3f cpi r24, 0xFA ; 250
138: 11 f4 brne .+4 ; 0x13e <Control_ACK+0x14>
13a: 88 e1 ldi r24, 0x18 ; 24
13c: 01 c0 rjmp .+2 ; 0x140 <Control_ACK+0x16>
else


Как видите команда WHILE один раз считывает регистр для сравнения и начинает кружиться
сама в себе .


[b] ВОПРОС ? Переменная X меняется в процессе обработки прерывания

, т.к. из памяти она читается один раз, то программа у меня висит.

Я мог бы решить это IF ами и прочими способами, но мне интересно В ЧЕМ ФОКУС ?


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post



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

 


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


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