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

 
 
> IAR MSP430 заоптимизировал?, Как его уговорить это не делать?
Dog Pawlowa
сообщение Jun 8 2007, 07:02
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Эта конструкция используется в нескольких местах этой функции, вызываемой в прерывании. Оказывается, что компилятор выкидывает присвоение переменной.
Как победить то? Неприятные грабли - это неожиданные, которые происходят, когда сложный проект работает, осталось немного подправить smile.gif
Прикрепленное изображение


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vmp
сообщение Jun 8 2007, 07:48
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(Dog Pawlowa @ Jun 8 2007, 11:02) *
Оказывается, что компилятор выкидывает присвоение переменной.

Не вижу никакого выкидывания.
pump_state кешируется в R14. В зависимости от missing_pulses в R14 пишется либо 0 (001F94), либо 1 (001F98), после чего R14 сохраняется в pump_state (001F9A). Просто компилятор чуть-чуть не попал с комментариями - это простительно на высоких уровнях оптимизации.

P.S. Основной источник глюков при использовании прерываний - программист, не знающий про ключевое слово volatile.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 8 2007, 11:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(vmp @ Jun 8 2007, 10:48) *
Не вижу никакого выкидывания.
pump_state кешируется в R14. В зависимости от missing_pulses в R14 пишется либо 0 (001F94), либо 1 (001F98), после чего R14 сохраняется в pump_state (001F9A). Просто компилятор чуть-чуть не попал с комментариями - это простительно на высоких уровнях оптимизации.

Спасибо. Действительно, погорячился. Простительно - отладчик в прерываниях ведет себя неадекватно, запаниковал.

Цитата(vmp @ Jun 8 2007, 10:48) *
P.S. Основной источник глюков при использовании прерываний - программист, не знающий про ключевое слово volatile.


Никогда не называл себя программистом :-)
А поясните, пожалуйста.
volatile на самом то деле указано для pump_state. И я думаю, что это совершенно не нужно. Если переменная используется ТОЛЬКО в прерывании, то volatile на самом то деле и не нужно, правда?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:39
Рейтинг@Mail.ru


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