|
С++, обработчик прерывания как статическая ф-я класса. |
|
|
|
Dec 4 2008, 09:35
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Пытаюсь запихать. Запихал: Код class TUart1 : public TCustomUart { public: TUart1(uint32_t baudrate) {hw_init(baudrate);} protected: ... virtual void hw_init(uint32_t baudrate); virtual void write_tx_reg(char ch) { TXBUF0 = ch; } static interrupt(UART0RX_VECTOR) usart0_rx(void); static interrupt(UART0TX_VECTOR) usart0_tx(void); };
...
interrupt(UART0TX_VECTOR) TUart1::usart0_tx(void) { OS::TISRW ISR; char ch; if (Uart1.TxChannel.get_count()) { Uart1.TxChannel.pop(ch); TXBUF0 = ch; } else { Uart1.tx_active = false; } } Делаю это для того, чтобы в прерывании обращаться к private-членам класса. Вроде всё получается. Единственное неудобство состоит в том, что пока я не напишу где-нибудь Код void TUart1::hw_init(uint32_t baudrate) { typedef void (* Handler)(void); volatile Handler ptr; ... ptr = &usart0_rx; ptr = &usart0_tx; } , обработчики прерываний не линкуются. Может есть какой-то более цивильный способ? Ну и вообще, хотелось бы не статическую функцию, а просто функцию класса  ЗЫ. msp-gcc.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
 |
Ответов
|
Jul 31 2009, 13:00
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Пытаюсь сделать следующим образом, но выдаются сообщения об ошибках. h-файл: Код class TUSART_Coding : public TUSART { private: static OS_INTERRUPT void TXHandler(void); // 39 строка static OS_INTERRUPT void RXHandler(void); // 40 строка ... }; cpp-файл: Код OS_INTERRUPT interrupt(USART_RX_vect) TUSART_Coding::RXHandler(void) { OS::TISRW_SS ISRW; Read_Next_Byte(); };
OS_INTERRUPT interrupt(USART_TX_vect) TUSART_Coding::TXHandler(void) { OS::TISRW_SS ISRW; Write_Next_Byte(); }; 39 error: expected unqualified-id before string constant 40 error: expected unqualified-id before string constant
В чём может быть дело?
Сообщение отредактировал n_bogoyavlensky - Jul 31 2009, 13:10
--------------------
Благодарю заранее!
|
|
|
|
|
Aug 3 2009, 05:41
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(AHTOXA @ Jul 31 2009, 20:59)  Скорее всего нет слова #include <scmRTOS.h> до объявления. В .h было. В .cpp не было. Цитата Да и не нужен этот атрибут (OS_INTERRUPT) в объявлении функции (в h-файле). Убрал. Эти ошибки исчезли, но появились новые... А что это за атрибут? Нашёл в исходниках, но пока не понял для чего он  Новые ошибки на код: Код OS_INTERRUPT interrupt(USART_RX_vect) TUSART_Coding::RXHandler(void) // Строка №284 { OS::TISRW_SS ISRW; Read_Next_Byte(); };
OS_INTERRUPT interrupt(USART_TX_vect) TUSART_Coding::TXHandler(void) // Строка №297 { OS::TISRW_SS ISRW; Write_Next_Byte(); }; TUSART_Coding.cpp|284|error: expected constructor, destructor, or type conversion before '(' token TUSART_Coding.cpp|297|error: expected constructor, destructor, or type conversion before '(' token
Что это? Кстати, вот здесь вот OS_INTERRUPT есть в описании: http://electronix.ru/forum/index.php?showt...st&p=511104
Сообщение отредактировал n_bogoyavlensky - Aug 3 2009, 05:35
--------------------
Благодарю заранее!
|
|
|
|
|
Aug 3 2009, 06:36
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(n_bogoyavlensky @ Aug 3 2009, 11:41)  В .h было. В .cpp не было. А .h включен в .cpp?  Цитата Убрал. Эти ошибки исчезли, но появились новые... А что это за атрибут? Нашёл в исходниках, но пока не понял для чего он  Он содержит дополнительные атрибуты для функции-обработчика прерывания. Например, __arm для АРМов. У вас какой проц? Какой компилятор? И как выглядит объявление OS_INTERRUPT? Цитата Что это? такое чувство, что не хватает слова void: OS_INTERRUPT interrupt(USART_TX_vect) void TUSART_Coding::TXHandler(void) // Строка №297 Цитата Оно не мешает, просто там в нём нет нужды (имхо).
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 3 2009, 06:57
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(AHTOXA @ Aug 3 2009, 10:36)  А .h включен в .cpp?  Конечно включен  Цитата Он содержит дополнительные атрибуты для функции-обработчика прерывания. Например, __arm для АРМов. У вас какой проц? Какой компилятор? И как выглядит объявление OS_INTERRUPT? По поводу дополнительных атрибутов понятно уже. Хотелось бы узнать что за атрибуты и для чего конкретно  Процессор ATmega168. Компилятор WinAVR20071221. OS_Target.h: Код # define OS_INTERRUPT extern "C" __attribute__((__signal__,__INTR_ATTRS)) \avr\interrupt.h: Код # define __INTR_ATTRS used, externally_visible Цитата такое чувство, что не хватает слова void: OS_INTERRUPT interrupt(USART_TX_vect) void TUSART_Coding::TXHandler(void) // Строка №297 С ним тоже самое Цитата Оно не мешает, просто там в нём нет нужды (имхо). Получается, что мешает, так как с ним присутствуют ошибки первого типа...
--------------------
Благодарю заранее!
|
|
|
|
|
Aug 3 2009, 08:41
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(n_bogoyavlensky @ Aug 3 2009, 10:19)  Тааак... и как нам быть?  Он знает слово interrupt. Точнее interrupt - это макрос, и содержимое его вы можете легко найти внутри avr/interrupt.h. И то, во что этот макрос разворачивается, делает его несовместимыым с понятием "статическая функция класса". Короче: Код .h: ISR(USART_RXC_vect); ISR(USART_UDRE_vect);
class uart_t { public: uart_t() {}; ... private: friend void USART_RXC_vect(); friend void USART_UDRE_vect(); void RXC_Handler(); void UDRE_Handler(); ... } .cpp: inline void uart_t::RXC_Handler() { ... }
OS_INTERRUPT void USART_RXC_vect() { OS::TISRW isr; UART.RXC_Handler(); }
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Aug 3 2009, 09:08
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Сергей Борщ @ Aug 3 2009, 14:41)  interrupt - это макрос, и содержимое его вы можете легко найти внутри avr/interrupt.h. А я что-то не нашёл... Есть только Код define ISR_NOBLOCK __attribute__((interrupt))
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
AHTOXA С++, обработчик прерывания как статическая ф-я класса. Dec 4 2008, 09:35 Legotron Цитата(AHTOXA @ Dec 4 2008, 12:35) ptr = ... Dec 4 2008, 09:45 xelax Цитата(AHTOXA @ Dec 4 2008, 12:35) Ну и в... Dec 4 2008, 09:56 AHTOXA Цитата(Legotron @ Dec 4 2008, 14:45) А ра... Dec 4 2008, 10:09 Сергей Борщ Цитата(AHTOXA @ Dec 4 2008, 11:35) Единст... Dec 4 2008, 10:11 AHTOXA Цитата(Сергей Борщ @ Dec 4 2008, 15:11) Ф... Dec 4 2008, 10:29  Сергей Борщ Цитата(AHTOXA @ Dec 4 2008, 12:29) Не то ... Dec 4 2008, 12:09   AHTOXA Цитата(Сергей Борщ @ Dec 4 2008, 17:09) В... Dec 4 2008, 12:19 dxp Цитата(AHTOXA @ Dec 4 2008, 15:35) Ну и в... Dec 4 2008, 12:49 AHTOXA Цитата(dxp @ Dec 4 2008, 17:49) Этого нел... Dec 4 2008, 14:22 AHTOXA Короче, разобрался я, в чём причина. Всё дело в ша... Dec 4 2008, 15:35 vik0 Цитата(AHTOXA @ Dec 4 2008, 17:35) Видимо... Dec 4 2008, 19:25  AHTOXA Цитата(vik0 @ Dec 5 2008, 00:25) Можете п... Dec 4 2008, 21:20   Vitaliy_ARM Цитата(AHTOXA @ Dec 5 2008, 00:20) То, чт... Dec 6 2008, 12:00    Сергей Борщ Цитата(Vitaliy_ARM @ Dec 6 2008, 14:00) А... Dec 6 2008, 12:44       AHTOXA Цитата(n_bogoyavlensky @ Aug 3 2009, 13:1... Aug 3 2009, 07:27        ReAl Цитата(AHTOXA @ Aug 3 2009, 10:27) Я не з... Aug 3 2009, 14:47         Сергей Борщ Цитата(AHTOXA @ Aug 3 2009, 12:08) А я чт... Aug 3 2009, 09:15 AHTOXA Цитата(ReAl @ Aug 3 2009, 20:47) А что то... Aug 3 2009, 15:27 ReAl Цитата(AHTOXA @ Aug 3 2009, 18:27) То ест... Aug 3 2009, 18:06  Damon Доброго времени суток! Позвольте вклиниться в ... May 27 2010, 07:26   klen мдя... С++ пошел в микроконтроллеры. кчему бы это ... May 27 2010, 08:27    MrYuran Цитата(klen @ May 27 2010, 12:27) мдя... ... May 27 2010, 08:34     klen Цитата(MrYuran @ May 27 2010, 12:34) Да у... May 27 2010, 08:38    Damon Цитата(klen @ May 27 2010, 12:27) если не... May 27 2010, 09:01   Сергей Борщ Цитата(Damon @ May 27 2010, 10:26) Код st... May 27 2010, 10:26    Damon Цитата(Сергей Борщ @ May 27 2010, 14:26) ... May 27 2010, 11:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|