Обясните пожалуйста как такое можно реализовать ?
Это функция:
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 ами и прочими способами, но мне интересно В ЧЕМ ФОКУС ?
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|