我有一个带有uclinux的两个控制器,第二个没有任何操作系统。它们通过串口连接。我检查了使用select
函数收到的新邮件。消息长度可能不同,没有操作系统的控制器每个字节发送消息。因此,有可能一个控制器不发送整个消息,select
函数返回新消息可用。之后我会收到不正确的消息。
我该如何防止这种情况发生?
答案 0 :(得分:2)
select
函数只会告诉您,您可以在不阻塞的情况下读取至少一个字节。在串行端口上发送的消息需要具有包含消息总长度的预定义标头,或者特殊的消息结束标记。
当select
表示您可以阅读时,您可以读取尽可能多的字节并将它们放入缓冲区。如果邮件未完成,请返回以使用select
等待更多数据。当更多数据到达时,您继续追加缓冲区。收到完整的消息后,您将对其进行处理。