Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: непронятки с прерываниями
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Понедельник
отлаживаю код для работы по прерываниям, инициализирую регистры дальше в основной программе бесконечный цикл. Проблема начилась с того, что прерывание происходит только один раз(AIC_EOICR в обработчике стираю), стал разбираться, оказалось, что после прерывания код улетает не на while (1); а на следующий адрес, т.е. перед прерыванием РС = 0х10116С, а после выхода РС = 0х101170, кстати в соответствии с адресом в регистре R14, что это, баг или руки кривые? Забыл добавить, среда Keil uVision3 компилятор GNU контроллерAT91SAM7X256.
aaarrr
Выход из IRQ - SUBS PC, R14, #4. Т.е. R14 действительно указывает на следующую команду.
Понедельник
Цитата(aaarrr @ Oct 12 2007, 14:31) *
Выход из IRQ - SUBS PC, R14, #4. Т.е. R14 действительно указывает на следующую команду.



это я понял, чего делать то, вставлять в Си,вставки асм ?
вообщето это работа компилятора, как мне кажется
aaarrr
Сказать компилятору, что функция является обработчиком прерывания.
Для GCC что-то вроде
Код
void bla_bla_irq(void) __attribute__ ((interrupt ("IRQ")));

если не ошибаюсь.
amw
1. Ну обработчик прерыавния должен быть правильно указан в заголовке. Для gcc это что-то типа __attribute__ ((interrupt, "IRQ")). Точно не помню, так как всегда пишу на ассемблере общий обработчик, вызывающий функции по назначению и типу прерывания.
2. Вроде как GCC был уличен в глюке по этому поводу. Опять же не могу сказать точно т.к не пользую.
aaarrr
Цитата(amw @ Oct 12 2007, 15:18) *
2. Вроде как GCC был уличен в глюке по этому поводу. Опять же не могу сказать точно т.к не пользую.

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