私はboost :: asioとboost :: asio :: serial_portデバイスに特有の問題があります。このコードは最終的には非同期の読み込みや処理ではうまく動作しますが、シリアルポートの速度を変更する方法はわかりません。boost :: asioでシリアルポートの速度を変更する方法(またはハードウェアバッファが空であるかどうか調べる方法)
今私がしようとしているのは、私のシリアルポートに接続されているデバイスにシリアルポートの速度を38400ボーに変更するよう伝えてから、コンピュータのシリアルポートを同じ速度に設定しています:
port_.set_option(boost::asio::serial_port_base::baud_rate(rate));
しかし、何が本当に起こっていることは、私はSET_OPTIONの一部を行う場合、デバイスは速度を変更するコマンドを受信したことがないということです。 set_optionを実行しないと、デバイスは速度を正しく変更します。私は何が起きているのかは、(ブロッキング、同期)書き込みは、コンピュータのハードウェアバッファにデータを入れて戻ってから、(データをデバイスに送信する前に)バッファを破棄するset_optionを行います。だから私は、ハードウェアのバッファが空で、デバイスが実際にコンピュータのシリアルポートを再設定する前に、速度を変更するコマンドを受け取ったかどうかを確認する方法を考える必要があります。私はまた、速度変更が有効になるためにポート上でclose()とopen()をしなければならないかどうかに関する情報を見つけることができません。 close()がバッファー内のものを破棄するかどうかも疑問に思っています...私はUSB->シリアルポートアダプターを使用しています。私のプラットフォームはUbuntu 10.10です。
私は基本的にboost :: asio:io_serviceとboost :: asio :: serial_portを持っています。io_serviceは初期化され、serial_portはコンストラクタのio_serviceで初期化され、次にserial_portはset_optionsで設定されます。 serial_portまたはio_serviceでflush()メソッドを見ることはできません。私はコード内にasio :: iostreamを持っていません。 – Dago
私は、異なる速度で動作する別のデバイスに接続するときに、シリアルポートを閉じています。興味深い問題です。申し訳ありませんが、もっと助けてもらえません。 – Kieveli
-1 OPはAsioストリームを使用していません –