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

时间:2015-04-17 17:54:23

标签: c++ serial-port arduino 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;
}

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

1 个答案:

答案 0 :(得分:3)

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