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

2024-04-03

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

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

计算机通过使用(流或串行?)“读取”彼此发送的数据来确定每个字节的含义?

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(使用前将#替换为@)

Arduino 上的 Serial 和 Stream 有什么区别,Serial.write 是如何实现的? 的相关文章

随机推荐