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

 
 
> WinAVR и RETI
Kuzmi4
сообщение Mar 3 2007, 10:25
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



В общем вопрос этот возник давно, но как то раньше я без этого обходился, а тут уж совсем невтерпёж стало.
Собсно вопрос такой - в иаре можно в таблице прерываний расположить для неиспользуемых векторов инструкцию RETI. На асме - вообще молчу. Но как это сделать для WinAVR??(исползую WinAVR-20060421).
Раньше,когда надо было, извращался по разному, вплоть до СПМ...
Но в принципе должно ж это как то решаться на уровне компилятора, как в иаре???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
singlskv
сообщение Mar 3 2007, 11:46
Сообщение #2


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



вот так делается пустое прерывание
EMPTY_INTERRUPT(vector);
или что то же самое
void vector (void) __attribute__ ((naked));
void vector (void) { __asm__ __volatile__ ("reti" :smile.gif; }
где на место vector подставляем свой interrupt
например TIMER1_OVF_vect

можно так же перенаправить все неиспользованные прерывания на
один обработчик
ISR(__vector_default);
или что то же самое
void vector (void) __attribute__ ((signal));
void vector (void) {}

соответственно можно написать вот так:
EMPTY_INTERRUPT(__vector_default);
правда тогда reti подставится не в саму таблицу а в отдельную функцию
чтобы подставить прямо в таблицу нужно прописать EMPTY_INTERRUPT для каждого
неиспользуемого

только нужно не забыть
#include <avr/interrupt.h>
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:36
Рейтинг@Mail.ru


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