我们有一些工作代码可以使用Boost asio与串口通信。我们一直在观察的一件事是这种通信不是实时的,并且有时存在显着的延迟。
我们希望接收和发送串行端口上的所有数据以及列表延迟量。这意味着我们希望在读取和写入时避免任何缓冲,因为缺少明确的刷新调用而避免任何批处理,或者避免使用可能使用其自身线程且正常优先级增加延迟的Boost异步调用。
是否有任何示例代码使用Boost asio进行串行端口通信,实时场景的延迟时间最短?如果示例代码用于TCP / UDP端口,我想我们仍然可以调整它...
答案 0 :(得分:1)
ASIO并没有提供那种东西。你最好直接使用序列号,但它并不像它对CPU造成的负担。
禁用输入缓冲类似fcntl(fd, F_SETFL, FNDELAY);
,即使阻止i / o打开,现在读取也会尽快返回。
强制写入发送类似于tcdrain()
。
自从我上次编写串行i / o代码以来已经很多年了,但上面对你来说是一个很好的开端。