Serial port UART通信中的超时/同步逻辑

Serial port UART通信中的超时/同步逻辑,serial-port,synchronization,logic,uart,serial-communication,Serial Port,Synchronization,Logic,Uart,Serial Communication,背景: 我使用UART在两个设备之间进行通信(使用不同的操作系统,一个使用Linux,另一个使用Windows)。我在Windows上有一个应用程序作为主控程序(发送命令),在Linux上有一个应用程序作为代理和响应应用程序。它将执行相应的操作并给出响应 Windows应用程序:应用程序将发送命令并等待响应。如果Linux在一些时间内(比如10秒)没有响应,请退出等待,通知用户超时错误(并由用户发送下一个命令) Linux应用程序:应用程序将等待命令。处理它(比如,最多5秒),然后向Window

背景: 我使用UART在两个设备之间进行通信(使用不同的操作系统,一个使用Linux,另一个使用Windows)。我在Windows上有一个应用程序作为主控程序(发送命令),在Linux上有一个应用程序作为代理和响应应用程序。它将执行相应的操作并给出响应

Windows应用程序:应用程序将发送命令并等待响应。如果Linux在一些时间内(比如10秒)没有响应,请退出等待,通知用户超时错误(并由用户发送下一个命令)

Linux应用程序:应用程序将等待命令。处理它(比如,最多5秒),然后向Windows发送响应

问题:如果由于任何错误/问题,Linux在Windows应用程序超时(例如15秒)后做出响应,Windows应用程序已中止该命令,认为该命令已超时,并发送下一个命令。第一个命令的响应被视为当前命令的响应,这是不正确的

解决方案:我想在Linux响应中附加命令字节作为第一个字节,以便在Windows应用程序中检查/验证(该响应是否针对当前命令),如果无效则忽略。但这也有局限性,即如果两个命令相同,将再次出现不匹配


我还可以实现什么逻辑来解决这个问题?

该命令应该包含一个唯一的ID,例如序列号或时间戳。响应必须包含此ID。我使用了时间戳(例如,一天中的秒数),因为这使得计算往返经过的时间变得很简单。谢谢@sawdust!这看起来是个好主意。我会检查一下,然后回来。。谢谢!:)