シリアルポート経由で受信したバイトを置くリングバッファがあります。現在、これらの受信バイトは、コマンドの後にデータバイトが続きます。また、これらのコマンドとデータの組み合わせはそれぞれ異なる長さにすることができます。私はこのバッファから1つのコマンドをコピーして実行できるメソッドを実装したいと思います。次に、次のコマンドなど。それを行うための最良の(そして最も単純な)方法は何でしょうか?コマンドのキューを実装する
1
A
答えて
0
簡易バイトストリームが行います。実際には、最初のステップとして、バイトストリームにはstd::stringstream
以上のラッパーを使用することもできます。シリアルポートと通信するルーチンで入力し、命令デコーダで読み込みます。
0
リングバッファについては、char [ring_size_in_bytes]と現在の位置インジケータintのような単純なものになります。ポートからの読み込みはバイト単位で行い、バッファの最後に到達するとゼロから開始します。
私は通常、コマンドとポートからのデータ読み取りに単純なバッファを使用します。ポートから小さなバッファにデータをコピーした後、飛行中のデータを解釈してコマンドの始めを見つけ出し、新しい開始点を検出するまでバッファに入れ始めます。その後、私はコマンドをエンキューし、やり直します。これはsericeルーチンの上半分(速いもの)を構成します。
シリアルポートは非常に遅いので、データを十分に速く読み取らないというリスクはありません。各反復(割り込み)は、あなたにいくつかのバイトを与えるでしょう...
私は受け取ったコマンドリストを格納するコマンドをカプセル化するタイプのキューを使用します。
シリアルプロトコルはどれくらい複雑ですか?
関連する問題
- 1. キューの実装
- 2. LUAキューの実装
- 3. 通知キューの実装
- 4. javaBeansでキューを実装する方法
- 5. キューのデキューとエンキューのメソッドを実装
- 6. FIFOベースのキュー実装ですか?
- 7. リンクリストを使用したキューの実装
- 8. キューを使用したセマフォの実装
- 9. 実行ファイルのキューを実装する方法
- 10. visualbasic6の循環キューの実装
- 11. Pythonでのキュー実装の違い
- 12. PHP AMQPの遅延キューの実装
- 13. URLを処理するワーカースレッドのキューを実装する方法
- 14. レルム - 非同期キューの実装
- 15. Brodal優先度キューの実装
- 16. なぜスタックとキューを実装するのですかjava
- 17. キューの擬似コードを使用してスタックを実装する
- 18. デジコードのようなシステムのキューを実装する
- 19. シリアルネットワークコールのキューを実装し、RxSwiftで処理する方法は?
- 20. 春のブートでjmsキューを実装する方法
- 21. 優先キューのヒープ実装を正しく修正する
- 22. Javaでlinked-listでキューを実装するのが難しい
- 23. PostgreSQL - 信頼できるキューを実装する
- 24. サーバー上でコマンドを実行する方法は? PHPキューlaravel ssh
- 25. Go - コンテナ/ヒープを使用して優先キューを実装する
- 26. ArrayListを使用して循環キューを実装する
- 27. LinkedListを使用してキューを実装する
- 28. 同時実行性:受信キューと送信キューの両方でエグゼキュータを実装する方法は?
- 29. CUDA on Thrust:優先キューを実装する方法
- 30. SpringブートでOracle AQキューを実装する方法は?
あなたの問題は何ですか、あなたがしたことを示す必要があります。 –
*ベスト(簡単な)方法は何ですか?* - 「ベスト」と「最もシンプル」はすべて主観的です。 – PaulMcKenzie
TLV構造体を使用してコマンドをカプセル化します。 https://stackoverflow.com/questions/tagged/tlv – Amadeus