对话
成员
唔。感谢鹰眼和错字报告。有趣的是,我从来没有对位明智的“或”有任何疑问。我想两个布尔值的有点明智的“或”仍然会产生同样的结果? |
作者
不,这是不同的,因为不同的运算符优先级。我认为旧代码
实际上评估为:
所以我会说它是按位或将固件缓冲区限制 (127) 与当前准备从串行端口读取的字节数进行运算。 这“有效”是因为这个特定数字(127 或 0x7F)已经设置了大部分位。与任何小于 128 的值按位或运算不会改变任何位。但是,如果固件自上次 write() 以来传输了超过 127 个字节(这可能不会经常发生),则此代码可能会溢出固件的缓冲区。 因此,s.inWaiting() 部分也不起作用。我认为这意味着代码将在开始处理响应之前先填充固件的缓冲区。不是预期的那样,但我希望它也不会被注意到,因为这个错误的唯一后果是它延迟了调试打印。(除非主机的串行 RX 缓冲区先溢出,这是不太可能的。) |
成员
@martinxyz: 行。谢谢。我将在下一次推送时手动应用此修复程序。 |
我很确定按位或不是意图。(阅读时发现;未实际测试。)