这似乎是一个简单的问题,但很难search。 我需要通过串口与设备连接。 如果我的程序(或其他)没有完成向设备写入命令,如何确保程序的下一次运行可以成功发送命令?
例:
foo
程序运行并开始编写“A_VERY_LONG_COMMAND” 有没有办法让这个更具决定性? 由于这样的问题,串口编程感觉非常失控。
所需的方法取决于设备。
ioctl()
处理这个问题。 +++
暂停”。 了解设备最初是为了支持交互式使用(串行终端),程序控制还是两者兼而有之可能是有用的。
我猜如果你调用write("A_VERY_LONG_COMMAND")
,然后用户点击Ctrl + C,当字节出去的时候,驱动程序层应该完成发送完整的缓冲区。 而如果用户在通话过程中断,驱动程序层可能会忽略整个事情。
以防万一,当你打开一个新的COM端口时,清除端口总是明智的。
你对设备端有控制吗? 实现超时可能会使设备忽略未完成或其他损坏的数据包。
应该实现嵌入式设备,以便您可以发送中止/清除/中断字符,将转储其命令缓冲区的内容,并为您的客户端应用程序启动提供一个干净的石板。
否则它应该提供一个软件重置字符,它将重置命令缓冲区和所有状态。
否则,它的设计可以让你发送一个命令终止符(可能是一个换行符等等,这取决于命令协议),并可能在解析缓冲区中出现的乱码部分命令时产生错误,查询/清除错误,然后很好去。
连接你的客户端程序,重复发送一些健康/状态/错误查询,直到你得到一个响应,然后才开始发送配置或操作命令,这不是一个坏主意。 除非可以通过查询确定设备处于合适的状态,否则可能不需要任何设置,并在配置重置(如果可用)后从零开始进行配置。