我有两个 Controller ,一个带有 uclinux,第二个没有任何操作系统。它们通过串行端口连接。我使用 select
函数检查收到的新消息。消息长度可能不同,没有操作系统的 Controller 按字节发送消息。因此,有可能一个 Controller 没有发送完整的消息,并且 select
函数返回新消息可用。之后我会收到不正确的消息。
我该如何避免这种情况?
最佳答案
select
函数只会告诉您可以读取至少 一个字节而不会阻塞。在串行端口上发送的消息需要有一个包含消息总长度的预定义 header ,或者一个特殊的消息结束标记。
当 select
说您可以读取时,您会读取尽可能多的字节并将它们放入缓冲区。如果消息不完整,您可以使用 select
返回等待更多数据。当更多数据到达时,您继续追加到缓冲区。收到完整的消息后,您将对其进行处理。
关于c++ - 如何理解 uart 端口收到了整个消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9696871/