如何理解uart端口收到整条消息?

时间:2012-03-14 06:17:09

标签: c++ linux select serial-port protocols

我有一个带有uclinux的两个控制器,第二个没有任何操作系统。它们通过串口连接。我检查了使用select函数收到的新邮件。消息长度可能不同,没有操作系统的控制器每个字节发送消息。因此,有可能一个控制器不发送整个消息,select函数返回新消息可用。之后我会收到不正确的消息。 我该如何防止这种情况发生?

1 个答案:

答案 0 :(得分:2)

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

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