Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Влияние уровня оптимизации на работоспособность...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Andy_F
Имеется проект под STM32F205, компилятор EWARM 6.30.4, используется библиотека периферии от ST 3.5.0 .

Программа пока не делает ничего полезного, инициализируется несколько периферийных устройств (SPI по прерыванию от таймера выдаёт некие числа, DAC по таймеру выдаёт табличные данные с помощью DMA). Сконфигурирован системный таймер для формирования задержек, мигаем светодиодиком...

Обнаружилось, что уровень оптимизации влияет на работу периферии:

Low - всё работает
Medium и High - перестают работать SPI и DAC (SPI "молчит", а DAC выдаёт какой-нибудь постоянный уровень).

При выключении опции "Code motion" c уровнем Medium всё перечисленное работает, с уровнем High - SPI работает, DAC - нет.

Дело, похоже, не в уровнях оптимизации, они лишь указывают на наличие проблемы. Не подскажите ли, в какую сторону смотреть ?

Спасибо.
scifi
Оптимизация часто влияет на переменные, используемые для передачи данных между обработчиком прерывания и основным потоком (отсутствие volatile). Также может влиять на задержки типа for (i=0; i<1000; i++){}.
Andy_F
Спасибо за отклик.

Проблема выявлена, к IAR, как таковому, не имеет отношения. В библиотеке от ST используется инициализация структурами. Их желательно полностью инициализировать значениями по умолчанию. В сопроводительных примерах этого не сделано, что и сбило с пути истинного...
scifi
Цитата(Andy_F @ Jan 23 2012, 10:36) *
Их желательно полностью инициализировать значениями по умолчанию.

Если структура - локальная переменная, то до инициализации её поля содержат мусор. А если глобальная - то нули. Так что тут всё естественно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.