Frage

Ich habe diese Vereinigung:

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 hat eine message_base als erstes Feld und reply_message hat eine message_with_parameters wie das erste Feld, die abwechselnd message_base wie das erste Feld hat.
Also im Grunde kann ich einen von ihnen zugreifen, und ich werde immer noch alle Daten, ich brauche bekommen, aber ich bin einen Puffer von meinem Fahrer bekommen und jetzt will ich es in die Nachricht serialisieren.
Ich weiß schon, dass der Zeiger auf den Puffer falsch ist, da es nicht korreliert mit meinem structs aber ich kann nicht eine feste Größe Puffer haben.
Irgendwo auf dem Weg Ich möchte, dies zu tun:

m->buffer = buff->payload;

Und egal, welche Art von Daten vom Typ I haben, wird es noch serialize.
Wie kann es geschehen?

EDIT:
Hier sind meine structs:

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;
War es hilfreich?

Lösung

sein, weil die Daten im Puffer nicht Teil der Vereinigung ist.

buffer_t * buffer ist ein Zeiger, so dass der Zeiger Teil der Union, nicht die Daten, die er zeigt auf

Sie wollen probablly etwas tun, wie

 m =  (message*) buff->payload;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top