清除boost::asio中串行端口的输入数据



我正在编写一个C++程序,用于使用boost::asio通过串行端口与Arduino通信。建立连接后,Arduino会重置自身。然而,C++程序的输入缓冲区仍然包含从Arduino发送的旧数据。由于我不使用这些数据,我想清除输入缓冲区。如何使用boost::asio实现这一点?

我的代码目前看起来是这样的:

#include <boost/asio.hpp>
#include <vector>
#include <iostream>
using namespace std;
using namespace boost::asio;
int main()
{
io_service io_service;
serial_port port(io_service, "/dev/ttyACM0");
port.set_option(serial_port_base::baud_rate(9600));
vector<char> buf(1);
read(port, buffer(buf));
cout << (int) buf[0] << endl;
return 0;
}

代码应该在读取命令处暂停,等待arduino发送串行数据。但是,有旧数据导致代码立即继续。

您可以刷新串行缓冲区,这应该是您想要的(在刷新之前清除所有挂起的数据)。不幸的是,Boost似乎没有这样做的包装器,所以你必须获取串行端口的native_handle。我使用的代码基于这个答案:https://stackoverflow.com/a/22598329/1167230

最新更新