5

Boost の asio::serial_port ライブラリを使用して、仮想シリアル ポート (FTDI チップ) と通信しています。ハードウェア フロー制御 (RTS/CTS) を使用したいのですが、Boost での使用方法に関するドキュメントがあまり見つかりません。私が持っているコードは次のとおりです。

serialPort.set_option(boost::asio::serial_port::
flow_control(boost::asio::serial_port::flow_control::hardware));

この行があると、プログラムは実行されません。それは言います:

libc++abi.dylib: terminate called throwing an exception
Abort trap: 6

...flow_control::hardware...flow_control::softwareまたはに変更すると...flow_control::none、シリアル ポートは正常に動作します (ただし、明らかにハードウェア フロー制御はありません)。これに関するドキュメントを探すのにかなりの時間を費やしましたが、何も見つかりませんでした。Boostでフロー制御を使用する方法を知っている人はいますか、またはこれが文書化されている場所を知っていますか? Mac OS 10.8.2 で Fink の Boost を使用しています。ありがとう!

4

1 に答える 1

0

これは古いリンクですが、シリアル データの 2 つの異なる検索で Google のトップ検索項目だったことを考えると、回答が必要だと感じました。

行自体は問題ではありません。おそらく問題は、間違ったタイミングで関数を呼び出したためにスローされた例外です。

信じられないかもしれませんが、最初にポートを開いてからフロー制御を設定する必要があります。上記の行は、行が他の行に関連していつ呼び出されるかの全体像を示していません。ポートが開いているときに setoption を配置すると、機能するはずです。

パラメータとしてboost::system_errorを取るset_optionのバージョンもあります。そのバージョンは、何らかの理由で機能しない場合にエラーを返します。system_error パラメーターを指定してバージョンを使用しない場合は、try/catch ブロックで例外をスローする可能性があり、例外をスローする関数をラップする必要があります。

また、終了は未処理の例外 (コーディングの問題) が原因であるため、終了時の不可解な例外です。例外を処理すると、例外自体がシリアル構成の問題 (実行時の問題) を示します。これは、設定する権限がないか、ポートが開いていないために RTS の可用性の検証が失敗したなどの可能性があります。

于 2013-10-10T17:47:18.303 に答える