我很难理解串行和流这两个术语之间的区别。串行不是流的一种吗?
我对作业有一些我不明白的问题。
计算机通过使用(流或串行?)“读取”彼此发送的数据来确定每个字节的含义?
Also, Serial.write()
我也很困惑。它返回一个字节的数据,对吗?一个字节是8位。因此,如果将 int 类型(16 位)传递给Serial.write()
在Arduino上,它会返回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
以一种重要的方式:write
以原始字节的形式发送内容并且print
以 ASCII 形式发送内容。所以,如果我Serial.print(255)
,Arduino 实际上会发送 3 个字节,即所有三位数字的 ASCII 代码。然而,如果我Serial.write(255)
那么 Arduino 将发送一个字节,其值为255
(0b11111111
).
那个数字write
返回的是已写入的字节数。它返回给调用者,而不是串行流。它告诉调用者写入了多少字节。
例如我有一个变量x
as the unsigned long
. Would Serial.write(x>>8)
是正确答案,因为long
是32位所以unsigned
使其变大两倍。自从Serial.write()
以字节为单位返回,64/8 将是 8
你在这里有一些非常根本的误解。未签名版本与签名版本具有相同的 32 位。它可以容纳两倍大的数字,因为它不需要符号位,但它具有相同数量的位数。要保留 32 位数量的 MSB,您需要右移 24 位。位移是以位为单位,而不是字节,所以myLong >> 24
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)