c++ - 如何理解 uart 端口收到了整个消息?

标签 c++ linux select serial-port protocols

我有两个 Controller ,一个带有 uclinux,第二个没有任何操作系统。它们通过串行端口连接。我使用 select 函数检查收到的新消息。消息长度可能不同,没有操作系统的 Controller 按字节发送消息。因此,有可能一个 Controller 没有发送完整的消息,并且 select 函数返回新消息可用。之后我会收到不正确的消息。 我该如何避免这种情况?

最佳答案

select 函数只会告诉您可以读取至少 一个字节而不会阻塞。在串行端口上发送的消息需要有一个包含消息总长度的预定义 header ,或者一个特殊的消息结束标记。

select 说您可以读取时,您会读取尽可能多的字节并将它们放入缓冲区。如果消息不完整,您可以使用 select 返回等待更多数据。当更多数据到达时,您继续追加到缓冲区。收到完整的消息后,您将对其进行处理。

关于c++ - 如何理解 uart 端口收到了整个消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9696871/

相关文章:

c++ - mpg123 链接错误 "_read"和 "_lseek"

c++ - 嵌套类的原始指针类成员无法返回分配的指向对象的数据

c++ - 使两种类型的相同模板兼容

linux - bash 脚本似乎无法执行 linux 命令

c - 如何在 Windows/Linux C 上查看 CPU 名称、型号、速度?

php - MySQL 一个单元格中存在多个数据

c++ - 使用 C++ 从 URL 解析 JSON 数据

linux - 使用Linux主机,我如何确定任意连接的硬盘驱动器的原始操作系统。

android - TextView在同一行,选择一个取消另一个

javascript - 如何删除重复结果并合并在 mySQL 查询中具有相似属性的对象?