簡體   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