2017-03-01 19 views
0

Boost asioを使用してシリアルポートと通信するための作業コードがあります。私たちが観察してきたことの1つは、この通信はリアルタイムではなく、ある程度の待ち時間があることです。Boost asioを使用したリアルタイムシリアルI/O

すべてのデータを受信し、リストの待ち時間のあるシリアルポートで送信したいと考えています。これは、読み書き中のバッファリング、明示的なフラッシング呼び出しの不足のためのバッチ処理、またはレイテンシを追加する通常の優先順位で独自のスレッドを使用するBoost非同期呼び出しを回避することを意味します。

リアルタイムシナリオのレイテンシを最小限に抑えながら、シリアルポート通信にBoost asioを使用するサンプルコードはありますか?サンプルコードがTCP/UDPポート用であれば、私たちはまだそれを適応させるかもしれないと思います...

答えて

1

ASIOは本当にそのようなものを提供しません。あなたはシリアルで直接行くのが良いでしょう、ちょうどCPUに課税されているようではありません。

入力バッファリングを無効にするのはfcntl(fd, F_SETFL, FNDELAY);なので、ブロッキングI/Oがオンになっていても常にすぐに読み取ります。

強制的に送信する書き込みは、tcdrain()のようなものです。

私はシリアルI/Oコードを最後に書いてから数年が経ちましたが、上記はあなたの頭の良いスタートです。

関連する問題