私はUARTインタフェースからデータを読み込むアプリケーションを書いています。データはパケットで送信されます。各パケットには、関連するチャネルがあります。私のアプリケーションは、受信したパケットを仮想チャネル(スレッド)に多重化し、すべてのチャネルが互いに独立して動作できるようにします。私がパケットを受け取ったとき、私はその内容に応じて何かをしなければならず、応答を生成する必要があります。同じUARTインタフェースを使用して応答が返送されます。バイナリデータを静的配列に格納する
送信されるデータは、ほとんどがバイナリです。私がUARTインターフェースから読んでいるとき、私はあらかじめパケットのサイズを知っているので、問題なくメモリをあらかじめ割り当てることができます。
私の問題は、応答を生成することです。私はパケットの最大サイズを知っているので、私は応答を構築するときに静的なバッファを作成することができます。バイナリデータではなくASCII文字で作業する場合は、バッファに格納されているデータの長さを判断するためにNULLターミネータを使用することができます。しかし、私はバイナリデータを扱っているので、NULLバイトを使うことはできません。代わりに、バッファの何バイトがすでに使用されているかを格納する変数を保持する必要があります。私は、バイナリデータを格納するためにカスタムデータ型を使用することを考えていました。
typedef struct {
unsigned char buff[2048];
size_t buff_used;
} binary_data_t;
これを処理する際のスタンドアロンの方法は何ですか?
そこには「標準」方法ですませんが、珍しいことではありません上で開始したもの。次に、さまざまな種類のデータをバッファに追加する関数のセットを追加します。 –
この種の問題のライブラリはありますか?私は車輪を再発明しているような気がする。 – PoVa
@PoVaもちろん、このサイトではライブラリを推薦するのは話題にはなりません。しかし、ホイールを再発明することは話題になります(モジュロ・ダプス)。 :) – unwind