繁体   English   中英

在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作为串行端口。 我基于此答案使用的代码: https : //stackoverflow.com/a/22598329/1167230

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM