Есть вот такой код(ниже только кусок) для приема комманд от ПК через СОМ порт и отправки данных обратно:
Код
u08 COMMAND;
UART_INTERRUPT_HANDLER(SIG_UART_RECV)
{
COMMAND = inb(UDR);
blink(); // мигаем ледом
}
int main(void)
{
sei();
// тут убраны разные инициализации
while(1)
{
//
// разная фигня
//
if ( COMMAND != 0x00 )
{
switch ( COMMAND )
{
case GET_TIME:
uartSendDT(); //отправляем на ПК время с ds1307
break;
case GET_TEMP:
uartSendTemp(); //отправляем на ПК температуру с ds1820
break;
}//end switch
COMMAND = 0x00;
}
_delay_ms(5);
}//end loop
}// end main
Так вот, если вместо "разная фигня" есть какой то код, то все работает,
если же там пусто, то при опции оптимизатора -О1 работает от случая к случаю, при -О2,О3,Оs не работает вообще.
Лед в обработчике прерывания мигает всегда, как положено.
Сабж?
Сообщение отредактировал AlexTech - Feb 17 2011, 07:08