我正在使用Arduino,我尝试创建一个过滤掉特殊数据的自定义序列类。因此,我想继承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:错误:','令牌之前的声明中的无效类型 class 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类:公共HardwareSerial(& UBRRH,& UBRRL,& UCSRA,& UCSRB,& UCSRC,& UDR){
答案 0 :(得分:0)
您不应尝试将HardwareSerial对象实例化为将其声明为基类的实例。这应该在你自己的对象的构造函数中完成。
class CUSB : public HardwareSerial {
// Constructor method
CUSB() : HardWareserial( /* your variables you wish to pass on to base class. */ ) {
/* Initialize your own class. */
}
[..]
};