私はこの組合を持っています:
typedef union Message
{
message_base base;
message_with_parameters parameters;
reply_message reply;
buffer_t *buffer; // can't figure out what to put here
} message;
message_with_parameters
はmessage_base
最初のフィールドとして a を持ち、最初のフィールドとして asをreply_message
持ち、最初のフィールドとして as を持ちます。
したがって、基本的にはそれらのいずれにもアクセスでき、必要なすべてのデータを取得できますが、ドライバーからバッファーを取得しているので、それをメッセージにシリアル化したいと考えています。
構造体と相関しないため、バッファーへのポインターが間違っていることは既に知っていますが、固定サイズのバッファーを持つことはできません。
途中のどこかでこれをやりたい: message_with_parameters
message_base
m->buffer = buff->payload;
どんな種類のデータ型を持っていても、シリアル化されます。
どうすればそれができますか?
編集:
ここに私の構造体があります:
typedef struct MessageBase
{
uint32_t u32DeviceID;
uint32_t u32CoreID;
uint16_t u16Class;
uint16_t u16CRC;
uint8_t u8OpCode;
void (*states [MAX_OPCODES]) (void *);
} message_base;
typedef struct MessageWithParameters
{
message_base base_class;
uint8_t u8Param1;
uint8_t u8Param2;
} message_with_parameters;
typedef message_with_parameters reply_message;
typedef union Message
{
message_base base;
message_with_parameters parameters;
reply_message reply;
} message;