2014-08-28 2 views
0

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: error: invalid type in declaration before ',' token class CUSB : public HardwareSerial(&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR){ ^ D:\Arduino\sketchbook\libraries\USB/USB.h:36:50: error: 'UBRRL' declared as reference but not initialized D:\Arduino\sketchbook\libraries\USB/USB.h:36:53: error: 'UCSRA' declared as reference but not initialized class CUSB : public HardwareSerial(&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR){

답변

0

당신은 시도하지 말아야을 예를 들어, 기본 클래스로 선언 한 HardwareSerial 개체. 이것은 자신의 객체의 생성자에서 수행되어야합니다.

class CUSB : public HardwareSerial { 

    // Constructor method 
    CUSB() : HardWareserial(/* your variables you wish to pass on to base class. */) { 
     /* Initialize your own class. */ 
    } 

    [..] 
}; 
+0

굉장 (작동 중)! 가상 함수를 덮어 쓰지 만 다른 인스턴스로 계속 사용하는 방법이 있습니까? 그래서 내가 할 수있는 USB.Serial.print();? CUSBSerial과 같은 다른 클래스를 만들고 CUSB 클래스에 인스턴스를 만들어야합니까? 아니면 더 간단한 방법이 있습니까? –

+0

오버라이드 된 가상 메소드의 기본 구현을 호출하는 것이면 다음과 같이 할 수 있습니다.'class CUSB : public HardwareSerial {virtual void foo() override {HardwareSerial :: foo(); }};'. 당신이 뭔가 다른 것을 의미하는지 명확히해야합니다. – Zoomulator

관련 문제