Проблема такая - IAR овский компиллер выкидывает строки из программы (на листинге они просто закомментированы) по своему усмотрению. Как можно заставить его не делать это. Отключение оптимизации для определенной функции не устраивает. Т.к. тот код, который выкидывается - опрос готовности клавиатуры используется во многих функциях программы и если для каждой из них отключить оптимизацию, то код вылезет из памяти. Это и есть злополучная строка. while(!(system_events.events_by_flags.Key_pressed)) {RETURN_IF_ING_OFF;}; system_events.events_by_flags.Key_pressed - это итовое поле, выставляемое в обработчике прерывания клавиатуры, RETURN_IF_ING_OFF - макрос выхода из функции при снятиии сигнала с определенной ноги процесстра.
|