我在理解术语串行和流之间的区别时遇到了很多麻烦。Serial 不是 Stream 的一种吗?
我对家庭作业有一些我不明白的问题。
计算机通过使用(流还是串行?)来“读取”它们相互发送的数据以确定每个字节的含义?
此外,也Serial.write()让我很困惑。它返回一个字节的数据,对吗?一个字节是 8 位。因此,如果Serial.write()在 Arduino 上传递一个 int 类型(16 位),它会向串行流返回 2 个字节吗?
类似地,如果 Arduino C 中的变量是 unsigned long,我们如何使用 将这个变量的最高有效字节表示给串行流Serial.write()?
例如,我有变量 x 作为 unsigned long。将Serial.write(x>>8)是正确的答案,因为 long 是 32 位,所以无符号使其大两倍。由于Serial.write()以字节为单位返回,因此 64/8 将是 8。
所有这些问题可能看起来都很业余,但我真的很想学习这些东西,而我的老师并不擅长解释。如果有人能在概念上更清楚地说明这一点,我将永远感激不尽。谢谢!
Stream 是 Serial 继承的基类。Serial 是 Stream 的一种类型,但还有其他类型的 Stream。
书写与印刷在一个重要方面有所不同。write 将事物作为原始字节发送,而 print 将事物作为 ascii 发送。所以我 Serial.print(255) arduino 实际上会发送 3 个字节,所有三个数字的 ascii 代码。但是如果我 Serial.write(255) 那么 Arduino 将发送一个值为 255 (0b11111111) 的单个字节。
write 返回的数字是写入的字节数。它返回给调用者,而不是串行流。它告诉调用者有多少字节被写入。
例如,我有变量 x 作为 unsigned long。Serial.write(x>>8) 是否是正确答案,因为 long 是 32 位,因此无符号使其大两倍。由于 Serial.write() 以字节为单位返回,因此 64/8 将是 8
你在这里有一些非常根本的误解。无符号版本与有符号版本具有相同的 32 位。它可以容纳两倍大的数字,因为它不需要符号位,但它具有相同的位数。要保留 32 位数量的 MSB,您需要右移 24 位。位移位是位而不是字节。所以我的龙>> 24