Andy_F 0 21 января, 2012 Опубликовано 21 января, 2012 · Жалоба Имеется проект под 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 1 21 января, 2012 Опубликовано 21 января, 2012 · Жалоба Оптимизация часто влияет на переменные, используемые для передачи данных между обработчиком прерывания и основным потоком (отсутствие volatile). Также может влиять на задержки типа for (i=0; i<1000; i++){}. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_F 0 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба Спасибо за отклик. Проблема выявлена, к IAR, как таковому, не имеет отношения. В библиотеке от ST используется инициализация структурами. Их желательно полностью инициализировать значениями по умолчанию. В сопроводительных примерах этого не сделано, что и сбило с пути истинного... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба Их желательно полностью инициализировать значениями по умолчанию. Если структура - локальная переменная, то до инициализации её поля содержат мусор. А если глобальная - то нули. Так что тут всё естественно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться