データ列を解析して以下の複数パターンデータをもつメッセージを受信します。
- uint8
- uint16
- blob(バイト列) : 最大255
- 子の配列:最大15(孫はなし)
このとき、受け側のメッセージ構造体を、mallocを使わずに静的にあらかじめ
確保しておきたいです。
単純に作ると以下のようにn x nの領域を確保することになってしまいます。
子がいなければBlobの最大サイズで済むのですが…
このような場合、どのように構造体を組むのが賢いのでしょうか。
自分では、静的にメモリを確保した独自メモリプールを用意してオレオレmallocを作る、
くらいしか思いつきません。
でも結局最大サイズ必要なのだから、構造が複雑化するだけのような気もしますし…
#define MAX_BLOB_SIZE 255 // BLOB最大サイズ #define MAX_NUM 15 // 子の最大サイズ // メッセージの型 enum MsgType_enum { MsgType_Uint8, MsgType_Uint16, MsgType_Blob, MsgType_Childs, MsgType_Max, } ; // メッセージの型 typedef uint8_t MsgType; typedef struct Message_st { uint8_t id; uint16_t msgLen; Data recvData[MsgTypeMax]; // 型の数だけ用意 } Message; // データ部 typedef struct Data_st Data; typedef struct Data_st{ uint8_t id; MsgType type; uint16_t dataLen; union { uint8_t u8; uint16_t u16; uint8_t blob[MAX_BLOB_SIZE]; Data childs[MAX_NUM]; } data; } Data; // 実際にはシングルトンで1インスタンスのみ確保。 Message recvMsg;
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/27 08:38
2016/06/28 00:38