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

 
 
> Грабли с FIQ в CrossWorks1.7.9 ?, В других версиях есть такая бага?
GetSmart
сообщение Sep 16 2009, 15:41
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Хотел сделать FIQ на Си под CrossWorks1.7 build 9. Сперва сделал IRQ для прерывания от АЦП. Всё заработало с первого раза. Потом решил переделать на FIQ. Долго трах..ся, но поведение уже отлаженной программы было каким-то безумным. Через несколько часов залез в ассемблерный листинг и вижу там глюк. Прикладываю фотки пролога и эпилога прерывания. На эпилоге видно, что вместо загрузки PC (для переключения режима) почему-то загружается LR, из-за чего управление не возвращается из FIQ, а проц продолжает исполнять всякий мусор после этого эпилога.
На картинке 1 -пролог, на картинке 2 - эпилог. Оптимизация = level 1.

прототип прерывания объявлен как
void AdcIntr() __attribute__((interrupt ("FIQ")));

--------
Щас заменил __attribute__((interrupt ("FIQ"))) на __attribute__((interrupt ("IRQ"))) и тот же глючный эпилог остался. Ничего не понимаю. Может что-то ещё нужно указывать? Как с инлайном например - одного атрибута __attribute__((always_inline)) недостаточно, необходимо ещё __inline перед прототипом приписывать, иначе прога зависает. Пока детально не изучал почему так.

Сообщение отредактировал GetSmart - Sep 16 2009, 15:56
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post



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

 


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


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