Ну эт понятно.. но если сделать только это, компилятор не знает, что у нас есть прерывания и может выносить из циклов переменные-семафоры.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено BlackJack 13 мая 2004 г. 16:26
В ответ на: Брррр отправлено Сергей Борщ 13 мая 2004 г. 15:56

Вот этот код с включенной оптимизацией не работает.

Var_key -это скан код клавиатуры. нажимаешь кнопку-диод загорается
L_Ctrl -это запуск канала таймера. Прерывание берет эту глобальную переменную и что-то с ней должно делать. на самом деле она остается нулем!



for(;;) {

switch (var_key){//key pressed
case 0x01:{a=1; PORTF=2; L_Ctrl=1; var_key=0;}; break;
case 0x02:{a=2;PORTF=4; L_Ctrl=1;var_key=0;}; break;
case 0x04:{a=3;PORTF=8;L_Ctrl=1; var_key=0;}; break;
case 0x08:{a=4;PORTD=0x10;var_key=0;}; break;
case 0x10:{a=5;PORTD=0x20;var_key=0;}; break;
case 0x20:{a=6;PORTD=0x40;var_key=0;}; break;
case 0x40:{a=7;PORTD=0x80; var_key=0;}; break;
}

if (L_Out&(0xfe)) {L_Out=0; L_Ctrl=0;PORTF=0; PORTD=0;};


}


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru