我正在迭代硬件串口,我想打印一些当前正在使用的端口的状态信息。如何打印HardwareSerial类型的名称?一些示例代码:
HardwareSerial *possible_ports[] = {&Serial2, &Serial3};
int port_count = 2;
for (int i=0; i<port_count; i++) {
Serial.print("using: ");
Serial.println(*possible_ports[i]);
}
尝试此操作时出现编译错误:
"no known conversion for argument 1 from 'HardwareSerial' to 'const Printable&'"
答案 0 :(得分:0)
好吧,正如编译器告诉你的那样,你不能打印HardwareSerial
,因为它毫无意义。
但是,你没有采取正确的方法解决问题,因为这是一个折叠的问题:
对于第一点,你可以做的并不多,一切都是在编译时设置的,而这是你必须实现的:不同的用例取决于不同的AVR。 / p>
HardwareSerial *possible_ports[] = {
#if defined(UBRRH) || defined(UBRR0H)
&Serial,
#endif
#if defined(UBBR1H)
&Serial1,
#endif
#if defined(UBBR2H)
&Serial2,
#endif
#if defined(UBBR3H)
&Serial3
#endif
};
关于第二点,我不认为在HardwareSerial类中有什么可以测试的,尽管你可以自己做:
bool serial_is_configured() {
return (_BV(TXEN0) & UCSRB == _BV(TXEN0));
}
bool serial1_is_configured() {
return (_BV(TXEN1) & UCSRB == _BV(TXEN1));
}
// ...
参见HardwareSerial的源代码:
在那里:
cbi()
清除了一点sbi()
设置了一下HTH