【问题标题】:Real-time serial I/O with Boost asio带有 Boost asio 的实时串行 I/O
【发布时间】:2017-07-20 07:50:07
【问题描述】:

我们有一些工作代码可以使用 Boost asio 与串行端口通信。我们一直观察到的一件事是这种通信不是实时的,有时会有很大的延迟。

我们希望在串行端口上接收和发送所有数据,并具有列表数量的延迟。这意味着我们希望避免在读取和写入时进行任何缓冲,避免因缺少显式刷新调用而导致的任何批处理,或者避免可能使用其自己的具有正常优先级的线程的 Boost 异步调用,从而增加延迟。

是否有任何示例代码使用 Boost asio 进行串行端口通信,实时场景的延迟最少?如果示例代码是针对 TCP/UDP 端口的,我想我们仍然可以适应它...

【问题讨论】:

    标签: c++ boost serial-port real-time boost-asio


    【解决方案1】:

    ASIO 并没有真正提供那种东西。最好直接使用串行,它不会对 CPU 造成负担。

    禁用输入缓冲类似于fcntl(fd, F_SETFL, FNDELAY);,现在读取总是尽快返回,即使阻塞 i/o 已打开。

    强制写入发送类似于tcdrain()

    自从我上次编写串行 i/o 代码以来已经有很多年了,但以上内容对您来说是一个良好的开端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2020-02-18
      相关资源
      最近更新 更多