ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
482254
OlegALL (23.01.2014 08:22 - 09:26, просмотров: 7261)
Проблема: после изменения переменной в обработчике прерывания по приёму в UART в другой функции она не изменяется. Поставил volatile, как надо, отключал оптимизацию - не помогает.  Компилятор: AVR Studio 4.18, процессор ATMega 168 Код: #include "main.h" volatile unsigned int send_flag = 0; int main (void){ init(); while (1){ //if (flags.send_answer == 1){ //send_flag = 1; if (send_flag == 1){ // КОД НИЖЕ НЕ ИСПОЛНЯЕТСЯ PORTC |= 1<<PC4; } } } ISR(USART_RX_vect){ send_flag = 1; switch (rx_stage){ case WAITING_START: if (UDR0 == REQUEST_START){ request[rx_stage] = UDR0; rx_stage++; } break; case WAITING_COMMAND: request[rx_stage] = UDR0; rx_stage++; break; case WAITING_LRC_HIGH: request_lrc.byte.high = UDR0; rx_stage++; break; case WAITING_LRC_LOW: request_lrc.byte.low = UDR0; rx_stage = 0; debug(); //get_lrc(); if (request_lrc.two_bytes == 0x3b){ // приём завершён } //flags.send_answer = 1; break; default: rx_stage = 0; break; } }