gpt4 book ai didi

c++ - Arduino上Serial和Stream有什么区别,Serial.write是如何实现的?

转载 作者:行者123 更新时间:2023-11-30 01:37:50 25 4
gpt4 key购买 nike

我很难理解串行和流这两个术语之间的区别。 Serial 不是 Stream 的一种吗?

我有一些我不明白的家庭作业问题。

计算机通过使用(Streams 或 Serial?)“读取”它们彼此发送的数据以确定每个字节的含义?

此外,Serial.write() 也让我很困惑。它返回一个字节的数据,对吗?一个字节是 8 位。因此,如果将 int 类型(16 位)传递给 Arduino 上的 Serial.write(),它会向串行流返回 2 个字节吗?

同样,如果 Arduino C 中的变量是无符号长整型,我们如何使用 Serial.write() 将此变量的最高有效字节表示为串行流?

例如,我将变量 x 作为 unsigned long。 Serial.write(x>>8) 会是正确答案吗,因为 long 是 32 位,所以无符号会使它大两倍。由于 Serial.write() 以字节为单位返回,因此 64/8 将为 8。

所有这些问题看起来都很业余,但我真的很想学习这些东西,而我的老师并不是最擅长解释的。如果有人能在概念上更清楚地说明这一点,我将永远感激不已。谢谢!

最佳答案

StreamSerial 继承的基类。 SerialStream 的一种,但也有其他类型的 Stream。

write 在一个重要方面与 print 不同:write 以原始字节发送内容,而 print 发送作为 ASCII 的东西。所以,如果我 Serial.print(255),Arduino 实际上会发送 3 个字节,所有三个数字的 ASCII 代码。但是,如果我 Serial.write(255) 那么 Arduino 将发送一个值为 255 (0b11111111) 的字节。

write 返回的数字是写入的字节数。它返回给调用者,而不是串行流。它告诉调用者写入了多少字节。

For example, I have a variable x as the unsigned long. Would Serial.write(x>>8) be the correct answer, because a long is 32 bits so unsigned makes it twice as big. Since Serial.write() returns in bytes, 64/8 would be 8

你在这里有一些非常根本的误解。未签名版本与签名版本相同,均为 32 位。它可以容纳两倍大的数字,因为它不需要符号位,但它具有相同的位数。要保留 32 位数量的 MSB,您需要右移 24 位。位移位以位为单位,而不是以字节为单位,因此 myLong >> 24

关于c++ - Arduino上Serial和Stream有什么区别,Serial.write是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48965951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com