UARTシリアルポートに接続されたストリームで、9600bpsでハーフデュープレックスRS-485プロトコルを使用しています。データ:8ビット、エンベデッドデバイスとのパリティなし。UARTストリームへの読み込み - チャンクされたデータ
私が接続しているシステムでは、バイナリコマンドを2バイトと10バイトの間で20ms間隔で送信することが分かります。
私は以下のフラグでストリームにアクセス:
uart0_filestream = open(COM_UART_DEV, O_RDWR | O_NOCTTY | O_NDELAY);
しかし、10バイト長のコマンドは自分のアプリケーションでチェックサムエラーの原因となっ半分にチャンクされることが頻繁に起こります。私は20ミリ秒ごとにポーリングする必要があり、私がこれで見つけた唯一の解決策は、私が欲しくない世論調査の間の睡眠時間を短縮することです。
ストリームバッファの内容を読み取る前に送信が完了していることを確認するためのフラグまたはスマートメソッドがありますか?
ハードウェアハンドシェイクの問題? –
@πάνταῥεῖおそらく実際には、私は他のデバイスがあらゆる種類のフロー制御を期待しているとは思わないでしょう。 – Machinegon
最悪のシナリオ(明らかに発生している)は、デバイスが20msごとにメッセージを送信し、プログラムがその送信の途中で20msごとにポーリング/読み取り(** 10ms **または** 50 xmit間隔の%**)。送信者と同期するメカニズムはありません。ポーリング間隔を長くすることは望ましくありません。あなたは投票率を上げる必要があります。 BTWは、読み込みシステムごとに完全なバイナリメッセージパケットを取得することを期待しています。ノンブロッキングモードを使用していますが、VMINとVTIME機能を利用できないという欠点があります。 – sawdust