boost::asio 清除串口输入数据
Clear input data from serial port in 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。我基于这个答案使用的代码:
我正在编写一个 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。我基于这个答案使用的代码: