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

 
 
> Оптимизатор кода в WinAVR, сплошное непонятство
Panych
сообщение Aug 21 2006, 13:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 335
Регистрация: 17-06-04
Из: Москва
Пользователь №: 35



Никак не могу понять, почему это требуется?: код без оптимизации работает, с оптимизацией по параметру "s" - приходится вставлять строки 170, 211 и 300.
Как они влияют на работу?
Смотрел листинг ассемблера - вроде ничего не меняется с их использованием, но ведь начинает работать!

Программа - начального уровня, конечно, но в самом начале хотелось бы уяснить, как оптимально писать...


--------------------
Всегда не хватает времени, чтобы выполнить работу как надо, но на то, чтобы ее переделать, время находится. (Закон Мескимена.)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tiro
сообщение Aug 21 2006, 14:08
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Есть две особенности, по-видимому, вами не учтенные :
1) ввод и вывод в АВР имеют встроенные синхронизаторы, что требует задержки в один такт перед считыванием пина _после изменения состояния соответствующего вывода_ (в дейташите раздел I/O-Ports -> Introduction)
2) любые _внешние по отношению к обработчику прерывания_ переменные, модифицируемые в прерывании (и в вызываемых из обработчика функциях), должны иметь модификатор volatile, чтобы запретить компилятору оптимизацию при работе с ними. Это не особенность WinAVR, а общее правило использования оптимизирующих компиляторов при написании обработчиков прерываний.

С уважением.

Сообщение отредактировал Tiro - Aug 21 2006, 14:12
Go to the top of the page
 
+Quote Post



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

 


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


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