Цитата(Сергей Борщ @ Mar 30 2007, 14:39)

Вот тут посмотрите. Как раз описывал несколько возможных вариантов.
Спасибо за ссылку!
Посмотрев подход №2 у меня возникло несколько вопросов.
Цитата
2) Делается одна функция-обработчик в которой делается сохранение/восстановление регистров и из этой функции вызываются обработчики, которые представляют из себя обычные функции. Функция-обработчик "подвешивается" на вектор исключения стандартными средствами компилятора:
#pragma vector = 0x0000018
__irq __arm void IRQ_Switch() {
(void (*)(void))(AT91C_BASE_AIC->AT91C_AIC_IVR)();
AT91C_BASE_AIC->AIC_EOICR = 0;
}
void Handler1() {
...........
}
void Handler2() {
...........
}
1)
Цитата
(void (*)(void))(AT91C_BASE_AIC->AT91C_AIC_IVR)();
Что означает (void (*)void))? У меня и компилятор ошибку выдает: expected a field name.
Можно подробнее описать этот момент.
2) Получается в конце функции
Цитата
void Handler1() { ...........}
не надо обнулять
AIC_EOICR?
Заранее благодарен!
3) Функция Handler1() соответствует источнику прерывания PID1?
Сообщение отредактировал Bulat - Apr 6 2007, 08:17