【发布时间】:2015-02-25 00:51:48
【问题描述】:
我有一些需要从串行设备读取的代码。它是一个轮询函数,以r 的速率调用。
设备以\r\n 分隔的行中输出数据,速度很快,大约为 100Hz。每当我轮询时,我都想读取整个串行缓冲区。我发现 boost::asio 很难做到这一点,因为它似乎没有为我提供 available() 函数。
我尝试的一种方法是使用read_until(),但这并不能解决我的问题,因为在read_until() 停止的\r\n 之后,缓冲区中可能有更新的数据。
我在读取缓冲区后尝试了consume(),但这仍然是一项黑客工作,直到我知道我已经从设备读取了最新数据。
有人对这个问题有什么建议吗?
【问题讨论】:
-
这是你必须照顾好自己的事情,boost::asio 并不认为
\r\n有那么特别。使用缓冲区。 -
@HansPassant 当然,我确实考虑过这一点,并使用了 read_until() 函数来处理它。但我在想的是,如果我使用 read_until(),它将从缓冲区堆栈的顶部读取。我想要最新的数据,因此将位于堆栈的底部。如何反转缓冲区?
-
在缓冲区清空之前不要补充缓冲区。串口驱动已经有接收缓冲区了。
标签: c++ boost serial-port boost-asio