【问题标题】:Receiving data that was sent to serial port before first read接收第一次读取前发送到串口的数据
【发布时间】:2014-06-26 05:20:34
【问题描述】:

我正在使用 ASIO 通过串行端口读取/写入设备。当我启动我的程序时,我首先需要确保设备配置正确。这是通过initialize_device() 函数中的一系列写入来完成的。在这些调用之后,设备会发回一些不感兴趣的数据。

initialize_device() 完成后,我调用我的start_receive() 函数,该函数又调用asio::async_read_until(),我的处理程序再次调用start_receive()

然而,问题是在initialize_device() 期间发送给我的不相关数据被我的处理程序“接收”,即使这是在我第一次读取之前接收到的数据。这出乎我的意料。

因此我想知道在initialize_device() 完成后是否有正确的方法来“刷新” asio::serial_port 使用的内部缓冲区?在我明确开始读取端口之前,我对收到的任何数据都不感兴趣。

【问题讨论】:

    标签: c++ serial-port boost-asio


    【解决方案1】:

    设备将具有记录的协议。

    您必须能够分辨出响应您的初始化命令而发送的内容。

    在开始读取“真实”数据之前,只需使用 async_read_until 将此信息放入一个虚拟缓冲区 (boost::asio::null_buffer?)。

    【讨论】:

    • 我无法让 null_buffer 与 async_read_until 一起工作。我现在决定处理返回的初始化数据,尽管我仍然可以看到有人不想处理在第一次接收之前收到的任何数据的情况。猜猜可以使用一个简单的布尔值来指示数据是否应该由处理程序处理。
    • 确实如此。您根本无法决定“不接收”设备已决定发送的数据。您必须明确忽略/丢弃它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多