реклама на сайте
подробности

 
 
> Оптимизатор IAR, Как локально отключить оптимизатор IAR
Sergio66
сообщение Feb 14 2006, 12:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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 - макрос выхода из функции при снятиии сигнала с определенной ноги процесстра.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sergio66
сообщение Feb 16 2006, 10:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Спасибо, я уже разобрался. Дело просто как апельсин! Переменная system_events у меня действительно объявлена, как volatile, однако, в том файле, где она используется, при объявлении ее как extern, я не указал тип volatile.
Go to the top of the page
 
+Quote Post
Igor26
сообщение Feb 16 2006, 10:30
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(Sergio66 @ Feb 16 2006, 13:02) *
Спасибо, я уже разобрался. Дело просто как апельсин! Переменная system_events у меня действительно объявлена, как volatile, однако, в том файле, где она используется, при объявлении ее как extern, я не указал тип volatile.

И компилятор не ругнулся?
Go to the top of the page
 
+Quote Post
vipvap
сообщение Feb 17 2006, 07:09
Сообщение #4





Группа: Новичок
Сообщений: 2
Регистрация: 16-02-06
Пользователь №: 14 396



Цитата(Igor26 @ Feb 16 2006, 13:30) *
Цитата(Sergio66 @ Feb 16 2006, 13:02) *

Спасибо, я уже разобрался. Дело просто как апельсин! Переменная system_events у меня действительно объявлена, как volatile, однако, в том файле, где она используется, при объявлении ее как extern, я не указал тип volatile.

И компилятор не ругнулся?


К сожалению, компилятор IAR не отслеживает ошибки с extern.
Кроме переменных, "можно" по-разному объявить внешние функции в разных файлах и опять же компилятор это пропустит, например, существующая функция
Код
void delay(unsigned [b]char[/b] ms);

в другом файле объявляется как:
Код
extern void delay(unsigned [b]short [/b]ms);

молчит...

Проверялось на IAR3.10c
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01995 секунд с 7
ELECTRONIX ©2004-2016