Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обработчик прерываний как член класса
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
ASZ
Можно ли сделать обработчик прерываний членом класса?
То, что обработчик должен быть static, понятно.

IAR EW_AVR 5.10
Код
class Timing{
private:
...
  Timing();
  #pragma vector = TIMER2_COMP_vect
  static __interrupt void TIMER2_COMP_handler(void);
public:
....
};

Обработчик:
#pragma vector = TIMER2_COMP_vect
__interrupt void Timing::TIMER2_COMP_handler(void){   //<- помечается как ошибка
...
}

Компиляция вышеприведенного дает сообщение:
"Error [PE276] Name followed by "::" must be a class or namespace name"

Может, подход к этому вообще принципиально неверный?
Сергей Борщ
Цитата(ASZ @ Mar 28 2009, 21:14) *
Может, подход к этому вообще принципиально неверный?
Нет, верный - прятал в свое время обработчики в классы, но сейчас под рукой нет ни одного исходника под EWAVR. Оставьте #pragma и __interrupt только в объявлении класса - мне кажется дело в этом.
ASZ
Цитата(Сергей Борщ @ Mar 29 2009, 04:15) *
Нет, верный - прятал в свое время обработчики в классы, но сейчас под рукой нет ни одного исходника под EWAVR. Оставьте #pragma и __interrupt только в объявлении класса - мне кажется дело в этом.

Проверил в разных комбинациях.
Пляски, к сожалению, ни к чему не привели.
Сергей Борщ
Цитата(ASZ @ Mar 29 2009, 08:34) *
Пляски, к сожалению, ни к чему не привели.
Нашел старый исходник, он точно компилился EWAVR v4.10B:
Код
class uart_t
{
public:
    uart_t() {}
  ..........
private:
    #pragma vector = USART_RXC_vect
    static __interrupt void  RxHandler(void);
  .......
} extern UART;

__interrupt void  uart_t::RxHandler(void)
{
.........
}
ASZ
Спасибо, Сергей.
К сожалению, проверить сейчас не могу, т.к. система рухнула - пишу с чужого компьютера.
ASZ
Проверил, работает smile.gif
Еще раз спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.