Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526
Проблема такая - IAR овский компиллер выкидывает строки из программы (на листинге они просто закомментированы) по своему усмотрению. Как можно заставить его не делать это. Отключение оптимизации для определенной функции не устраивает. Т.к. тот код, который выкидывается - опрос готовности клавиатуры используется во многих функциях программы и если для каждой из них отключить оптимизацию, то код вылезет из памяти. Это и есть злополучная строка. while(!(system_events.events_by_flags.Key_pressed)) {RETURN_IF_ING_OFF;}; system_events.events_by_flags.Key_pressed - это итовое поле, выставляемое в обработчике прерывания клавиатуры, RETURN_IF_ING_OFF - макрос выхода из функции при снятиии сигнала с определенной ноги процесстра.
Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526
Спасибо, я уже разобрался. Дело просто как апельсин! Переменная system_events у меня действительно объявлена, как volatile, однако, в том файле, где она используется, при объявлении ее как extern, я не указал тип volatile.