Я использую Arduino, и я пытаюсь создать пользовательский Serial Class, который отфильтровывает специальные данные. Поэтому я хочу наследовать HardwareSerial для доступа к его защищенному буферу RX.
Я могу представить себе три решения: наследовать класс для доступа к этому буферу
Создайте экземпляр этого класса в моем классе, но затем я не знаю, как получить доступ к защищенному буферу
Скопируйте весь класс или просто наследуйте несколько функций для изменения всех функций. может быть лучшим решением.
Что работает:
.h:
extern HardwareSerial Serialk;
.cpp:
HardwareSerial Serialk(&UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UCSR0C, &UDR0);
Serialk._tx_udr_empty_irq();
Но я не могу наследовать класс следующим образом:
class CUSB : public HardwareSerial (&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR){
[..] }
Это вызывает такие ошибки:
D:\Arduino\sketchbook\libraries\USB/USB.h: 36: 50: ошибка: недопустимый тип объявления до ',' класс токена CUSB: public HardwareSerial (& UBRRH, & UBRRL, & UCSRA, & UCSRB, & UCSRC и UDR) {^ D:\Arduino\sketchbook\libraries\USB/USB.h: 36: 50: ошибка: 'UBRRL' объявлен как ссылка, но не инициализирован D:\Arduino\sketchbook\libraries\USB/USB.h: 36: 53: ошибка: 'UCSRA' объявлен как ссылочный, но не инициализированный класс CUSB: public HardwareSerial (& UBRRH, & UBRRL, & UCSRA, & UCSRB, & UCSRC и UDR) {
Вы не должны пытаться экземпляр объекта HardwareSerial, где вы объявляете его как базовый класс. Это должно быть сделано в конструкторе вашего собственного объекта.
class CUSB : public HardwareSerial {
// Constructor method
CUSB() : HardWareserial( /* your variables you wish to pass on to base class. */ ) {
/* Initialize your own class. */
}
[..]
};
class CUSB : public HardwareSerial { virtual void foo() override { HardwareSerial::foo(); } };
, Вам придется уточнить, если вы имели в виду что-то еще.