さまざまなプロジェクトのためにいくつかの異なるカスタムシリアルプロトコルを作成した後、私は毎回車輪の再発明をすることに不満を感じ始めました。すべてのプロジェクトのカスタムソリューションを開発し続ける代わりに、私はより一般的なソリューションを探していました。次の要件を満たすシリアルプロトコル(またはさらに良いのは実装)を誰かが知っているかどうか疑問に思いました。
- 複数のデバイスをサポートします。RS485バスをサポートできるようにしたいと考えています。
- 配達保証。ある種の確認応答メカニズムと、いくつかの単純なエラー検出(CRC16はおそらく問題ありません)。
- マスター/スレーブではありません。理想的には、スレーブはデータを非同期で送信できます。これは主に美的理由によるものであり、各スレーブをポーリングするという概念は私には正しく感じられません。
- OSの独立性。理想的には、プリエンプティブなマルチタスク環境にまったく依存しません。他のものを手に入れることができれば、私はこれを認めるつもりです。
- ANSIC.いくつかの異なるアーキテクチャ用にコンパイルできる必要があります。
速度はそれほど問題ではありません。他のニーズのいくつかを満たすために、速度をあきらめるつもりです。ただし、必要なリソースの量を最小限に抑えたいと考えています。
ピギーバックACKを使用し、選択的な繰り返しを使用せずにスライディングウィンドウプロトコルの実装を開始しようとしていますが、おそらく誰かが私に問題を解決できると考えました。私が活用できる既存のプロジェクトを知っている人はいますか?またはおそらくより良い戦略?
更新
私はTCP/IPの実装を真剣に検討しましたが、もっと軽量なものを本当に望んでいました。TCP / IPの機能の多くは、私がやろうとしていることには行き過ぎです。私は(しぶしぶ)、おそらく私が欲しい機能がより軽いプロトコルに含まれていないことを喜んで受け入れます。
UPDATE2CAN
に関するヒントをありがとう。私は過去にそれを見たことがあり、おそらく将来それを使用するでしょう。ただし、確認応答、バッファリング、再試行などをライブラリで処理することを本当に望んでいます。データリンク/物理層ではなく、ネットワーク/トランスポート層を探していると思います。
UPDATE 3
つまり、この分野の最先端技術は次のように思えます。
- 縮小されたTCP/IPスタック。おそらくlwIPやuIPのようなものから始めます。
- CANベースの実装では、おそらくCANバスに大きく依存するため、他の物理層では役に立ちません。CANフェスティバルのようなものが途中で役立つかもしれません。
- HDLCまたはSDLCの実装(このような)。これはおそらく私たちがたどるルートです。
この質問に出くわした場合は、お気軽に回答を投稿してください。