2012-03-14 4 views
0

私はuclinuxで2つのコントローラを1つ持っています.2つ目のコントローラはosなしです。それらはシリアルポートで接続されています。私はselect機能で受信した新しいメッセージを確認します。メッセージの長さは異なる場合があり、osのないコントローラはバイト単位でメッセージを送信します。したがって、1つのコントローラがメッセージ全体を送信せず、select関数が新しいメッセージが利用可能であると返す可能性があります。その後、私は間違ったメッセージを受け取るでしょう。 どうすればこのような状況を防ぐことができますか?uartポートのメッセージ全体をどのように受け取ったのか理解するには?

+0

本当にマイクロコントローラでC++を使用していますか、それともCですか? –

+0

私はdspプロセッサでC++を使用し、マイクロコントローラではcを使用します。 – rdo

答えて

2

select関数は、少なくとも1つのブロックをブロックすることなく1バイト読むことができることを伝えます。シリアルポートで送信されるメッセージには、メッセージの全長を含むあらかじめ定義されたヘッダーか、特別なメッセージ終了マーカーが必要です。

selectは、読み込めると言いますが、できるだけ多くのバイトを読み込んでバッファに入れます。メッセージが完了していない場合は、selectでさらにデータを待つことに戻ります。より多くのデータが到着すると、引き続きバッファに追加されます。完全なメッセージが受信されると、それを処理します。

+0

答えをありがとう。 – rdo

関連する問題