|
IAR AVR C++ class и прерывание |
|
|
|
Oct 2 2009, 20:21
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Подскажите как правильно описать прерывание от uart0 для функции которая определяется в класе на уровень выше, так сказать пртоколе верхнего уровня cHuProt. Сам клас Код #include "com0.h"
class cHuProt:public cUsart0 { protected: void HU_Rx_Byte(void); public: ui8 Recive_Pack_HU(void); ui8 Recive_Pack_HU_End(void); ui8 Init_HU(void); ui8 Reset_Recive_HU(void); ui8 Expect_new_HU(void); ui8 ECM_HU_len(void); ui8* Get_Point_to_ECM_HU_data(void); ui8* Get_Point_to_HU_S(void); ui8* Get_Point_to_HU_C(void); ui8* Get_Point_to_HU_I(void); ui8 DW_HU_Transmit(ui8 *pData); //cHumaxProt(); //~cHumaxProt(); }; В клас cUsart0 я записал все низкоуровневые функции работы с железом uart Код class cUsart0 { protected: ui8 Usart0_Tx_Raw(ui8 tx_char); ui8 Usart0_RX_Raw(void); public: ui8 Usart0_Init(ui16 ubrr); ui8 Usart0_Tx_Data(ui8 *pData, ui8 len_data); ui8 Usart0_Tx_Char(ui8 tx_char); //Usart0(); //~Usart0(); };
///////////////////////////////////////////////////////////////////////////// // Реализация класса cUsart0 ///////////////////////////////////////////////////////////////////////////// .... .... .... Сама функция Usart0_Init использует прерывание при получении символа с uart. Очень хочется вызывать функцию Usart0_RX_Raw(void); когда приходит символ, тоесть както так описать метод в протоколе Код #pragma vector = USART0_RXC_vect __interrupt void cHuProt::HU_Rx_Byte(void) { temp=ui8 Usart0_RX_Raw(); ...... ...... } но увы получаю ошибки Цитата Error[Ta022]: Interrupt functions cannot take any parameters. D:\Main_prj\tutor\MainTestCPP\hu.h 19
|
|
|
|
|
 |
Ответов
|
Oct 3 2009, 13:30
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(AHTOXA @ Oct 3 2009, 14:10)  Что значит "к представлению"? К приватным членам? Да, к закрытой части класса. Цитата(AHTOXA @ Oct 3 2009, 14:10)  Если так, то вызываемая uart.HUMAX_Rx_Byte(), как функция класса, тоже имеет доступ к представлению класса  А так и функцию дополнительную городить не надо - сразу в этой все и пишешь. В общем, как делать - вопрос вкусовых предпочтений, по большей части. Но если есть возможность не плодить лишние сущности, то это есть гуд. Цитата(west329_ @ Oct 3 2009, 18:22)  Вобщем как я не пытался так и не получилось у меня повесит напрямую прерывание на метод класса. Пошол по другому пути, создал обычную процедуру повесил на неё прерывание а из него уже вызываю метод класса, незнаю можна так делать или нельзя, код проверял работает нормально. Код #pragma vector = USART0_RXC_vect __interrupt void Recive_Byte_from_tu(void) { ui8 Rx_Ch = Tu.HU_Rx_Byte(); .... .... ....} А если в классе объявить: __interrupt static void Receive_Byte_from_tu(); то не работает, что-ли? Что не работает в этом случае? Не собирается проект? Или в железе не работает?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 3 2009, 14:42
|

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

|
Цитата(dxp @ Oct 3 2009, 19:30)  А так и функцию дополнительную городить не надо - сразу в этой все и пишешь. В общем, как делать - вопрос вкусовых предпочтений, по большей части. Но если есть возможность не плодить лишние сущности, то это есть гуд. Зато в этой функции придётся обращаться к членам класса с указанием экземпляра класса. Типа, Код uart.rxbuf[uart.rxpos++] = U0RXBUF; uart.rxpos &= uart.rxsize; И к тому же, такой подход не везде работает. Например, в avr-gcc нельзя сделать обработчик прерывания функцией класса. А вообще - да, согласен, дело вкуса
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
west329_ IAR AVR C++ class и прерывание Oct 2 2009, 20:21     dxp Цитата(AHTOXA @ Oct 3 2009, 21:42) Зато в... Oct 5 2009, 07:47      singlskv Цитата(dxp @ Oct 5 2009, 11:47) Но и в эт... Oct 5 2009, 22:09 west329_ Вобщем как я не пытался так и не получилось у меня... Oct 3 2009, 11:22 Alechin а если я хочу созать шаблон класса с обработчиком ... Dec 4 2009, 07:18 Сергей Борщ Цитата(Alechin @ Dec 4 2009, 09:18) в ито... Dec 4 2009, 08:14 Alechin Цитата(Сергей Борщ @ Dec 4 2009, 11:14) И... Dec 4 2009, 08:24 XVR У меня есть БОЛЬШИЕ сомнения по поводу допустимост... Dec 4 2009, 09:23 Alechin ЦитатаПрерывания придется делать вне класса, в вид... Dec 4 2009, 09:44 XVR Цитата(Alechin @ Dec 4 2009, 12:44) А, я ... Dec 4 2009, 09:50 Alechin Хорошо, допустми каким-либо образом мне удалось со... Dec 4 2009, 10:55 XVR Классы таймеров состоят исключительно из констант ... Dec 4 2009, 11:48 Alechin ЦитатаКлассы таймеров состоят исключительно из кон... Dec 4 2009, 12:02 XVR Цитата(Alechin @ Dec 4 2009, 15:02) ну то... Dec 4 2009, 13:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|