Arduino上的串行和流之间有什么区别,以及如何实现序列
What is the difference between Serial and Stream on the Arduino, and how is Serial.write implemented?
我很难理解术语串行和流之间的区别。串行不是流的类型吗?
我有关于家庭作业的疑问。
计算机"读取"他们通过使用(流或串行?(相互发送的数据来确定每个字节的含义?
另外,Serial.write()
也使我感到困惑。它返回数据字节,对吗?一个字节是8位。因此,如果将int类型(16位(传递给arduino上的 Serial.write()
,则将返回2个字节到串行流?
同样,如果变量在arduino c中是无符号的长度,我们如何使用 Serial.write()
?
例如,我将变量x作为无符号长。 Serial.write(x>>8)
是正确的答案,因为长时间是32位,因此未签名使它的大两倍。由于Serial.write()
在字节中返回,因此64/8为8。
所有这些问题似乎真的很业余,但是我真的想学习这些东西,我的老师并不是最好的解释。如果有人可以从概念上更清楚地表明这一点,我将永远感激不尽。谢谢!
Stream
是Serial
继承的基类。Serial
是Stream
的一种类型,但也有其他类型的流。
write
与print
不同的方式不同:write
以RAW BYTES和print
的形式发送内容,将事物发送为ASCII。因此,如果我Serial.print(255)
,Arduino实际上将发送3个字节,ASCII代码为所有三位数字。但是,如果我 Serial.write(255)
,则Arduino将发送一个单个字节,其值为255
(0b11111111
(。
write
返回的数字是编写的字节数。它返回到呼叫者,而不是串行流。它告诉呼叫者写了多少个字节。
例如,我有一个可变的
x
作为unsigned long
。Serial.write(x>>8)
是正确的答案,因为long
是32位,因此unsigned
使其大大两倍。由于Serial.write()
在字节中返回,因此64/8为8
您在这里有一些非常基本的误解。未签名的版本与签名版本相同32位。它的数字可以容纳两倍,因为它不需要符号,但具有相同数量的位。要留下32位数量的MSB,您需要向右移动24位。Bitshifts是位,而不是字节,所以myLong >> 24
。
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 如何自己为我自己的shared_ptr实现实现别名构造函数
- 这个UTF-8实现实现是定义的还是定义良好的
- 我的 PRNG 实现与我尝试复制的实现有何不同?