打印硬件的名称
print name of HardwareSerial type
我正在迭代硬件串行端口,我想打印一些关于哪个端口当前正在使用的状态信息。如何打印硬件串行类型的名称?一些示例代码:
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&'"
好吧,正如编译器告诉你的那样,你不能打印HardwareSerial
,因为它没有意义。
然而,你没有采取正确的方法来解决你的问题,因为这是一个折叠问题:
- 根据硬件的不同,您可能有不同数量的串行端口;
- 在设置中设置或不设置串口。
对于第一点,你能做的不多,一切都是在编译时设置的,这就是你必须实现的:不同的用例取决于不同的AVR。
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));
}
// ...
cf源码:
- 第487行
- 第406行
-
cbi()
清除位 -
sbi()
设置位
HTH
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 打印数字图案
- 打印硬件的名称