2017-06-22 4 views
1

シリアルポート経由で受信したバイトを置くリングバッファがあります。現在、これらの受信バイトは、コマンドの後にデータバイトが続きます。また、これらのコマンドとデータの組み合わせはそれぞれ異なる長さにすることができます。私はこのバッファから1つのコマンドをコピーして実行できるメソッドを実装したいと思います。次に、次のコマンドなど。それを行うための最良の(そして最も単純な)方法は何でしょうか?コマンドのキューを実装する

+1

あなたの問題は何ですか、あなたがしたことを示す必要があります。 –

+0

*ベスト(簡単な)方法は何ですか?* - 「ベスト」と「最もシンプル」はすべて主観的です。 – PaulMcKenzie

+0

TLV構造体を使用してコマンドをカプセル化します。 https://stackoverflow.com/questions/tagged/tlv – Amadeus

答えて

0

簡易バイトストリームが行います。実際には、最初のステップとして、バイトストリームにはstd::stringstream以上のラッパーを使用することもできます。シリアルポートと通信するルーチンで入力し、命令デコーダで読み込みます。

0

リングバッファについては、char [ring_size_in_bytes]と現在の位置インジケータintのような単純なものになります。ポートからの読み込みはバイト単位で行い、バッファの最後に到達するとゼロから開始します。

私は通常、コマンドとポートからのデータ読み取りに単純なバッファを使用します。ポートから小さなバッファにデータをコピーした後、飛行中のデータを解釈してコマンドの始めを見つけ出し、新しい開始点を検出するまでバッファに入れ始めます。その後、私はコマンドをエンキューし、やり直します。これはsericeルーチンの上半分(速いもの)を構成します。

シリアルポートは非​​常に遅いので、データを十分に速く読み取らないというリスクはありません。各反復(割り込み)は、あなたにいくつかのバイトを与えるでしょう...

私は受け取ったコマンドリストを格納するコマンドをカプセル化するタイプのキューを使用します。

シリアルプロトコルはどれくらい複雑ですか?

関連する問題