Arduino上的串行和流之间有什么区别,以及如何实现序列

What is the difference between Serial and Stream on the Arduino, and how is Serial.write implemented?

本文关键字:何实现 实现 区别 什么 之间 Arduino      更新时间:2023-10-16

我很难理解术语串行和流之间的区别。串行不是流的类型吗?

我有关于家庭作业的疑问。

计算机"读取"他们通过使用(流或串行?(相互发送的数据来确定每个字节的含义?

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

同样,如果变量在arduino c中是无符号的长度,我们如何使用 Serial.write()

表示该变量的最重要字节?

例如,我将变量x作为无符号长。 Serial.write(x>>8)是正确的答案,因为长时间是32位,因此未签名使它的大两倍。由于Serial.write()在字节中返回,因此64/8为8。

所有这些问题似乎真的很业余,但是我真的想学习这些东西,我的老师并不是最好的解释。如果有人可以从概念上更清楚地表明这一点,我将永远感激不尽。谢谢!

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

writeprint不同的方式不同:write以RAW BYTES和print的形式发送内容,将事物发送为ASCII。因此,如果我Serial.print(255),Arduino实际上将发送3个字节,ASCII代码为所有三位数字。但是,如果我 Serial.write(255),则Arduino将发送一个单个字节,其值为255(0b11111111(。

write返回的数字是编写的字节数。它返回到呼叫者,而不是串行流。它告诉呼叫者写了多少个字节。

例如,我有一个可变的x作为unsigned longSerial.write(x>>8)是正确的答案,因为long是32位,因此unsigned使其大大两倍。由于Serial.write()在字节中返回,因此64/8为8

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