SyntaxHighlighter

2016年1月18日月曜日

Boost AsioでSerialのレスポンスが妙に遅い(その上それがばらつく)とき

Boost AsioでSerialのレスポンスが妙に遅い(その上それがばらつく)とき。
例えば、ループバックで1バイト送って帰ってくるのに、16ms~70msとかかかるとき。
特に、再起動直後重かったりする場合。

大抵、Readに時間がかかっています。
そして、Windows APIで直接COMポートを叩いたり、Boost Asioを使う場合でも
固定長のデータをやり取りする場合は早かったりします。

解決方法
1.読み込み時のバッファ変数を小さくする
2.transfer_at_leastを使わないでReadする。

これだけで、応答が1ms以下になったりしますが、これでも解決しない場合。

USBシリアル変換器を使っていませんか?
その場合は、デバイスマネージャの当該機器の詳細設定の「レイテンシタイマー」を
適切な値(環境によりますが、1ms~6msの間くらい)で設定してあげると、早くなります。

0 件のコメント:

コメントを投稿