Probleme mit Zuweisen von Werten an Strukturen

Gast #285470
Lesenswert?

Hallo,

ich habe in einer Applikation eine globale Statusvariable SysCfg mit
folgender Struktur:


typedef unsigned char    u8;
typedef unsigned int    u16;

typedef enum {
    OPMODE_UNDEFINED = 0x00,
    NORMAL,
    DEBUG
} OperatingModeType_en;


typedef enum {
    CMD_UNDEFINED = 0x00,
    CAPTURE_START,
    CAPTURE_IN_PROGRESS,
    CAPTURE_COMPLETE
} AdcCtrlTypes_en;


typedef struct {
    u16  UcInputPins_u2:2;
    u16  DsrInputPins_u4:4;
} DigitalCaptureConfigType_t;


typedef struct {
    u16  UcInputPins_u2:2;
    u16  MuxInputPins_u5:5;
} AnalogueCaptureConfigType_t;


typedef union {
    OperatingModeType_en         OpMode;
    AdcCtrlTypes_en              AdcCtrl;
    DigitalCaptureConfigType_t   DigCap;
    AnalogueCaptureConfigType_t  AnaCap;
} SystemConfigurationType_t;

...

volatile SystemConfigurationType_t SysCfg;



Wenn ich nun einzelne Werte dieser Systemvariable verändern möchte,
z.B. mit

SysCfg.AdcCtrl = CAPTURE_START;      oder
SysCfg.DigCap.UcInputPins_u2 = 2;


werden immer _alle_ Member dieser Struktur auf den zugewiesenen Wert
gesetzt. Wenn die o.g. Beispielaufrufe tätige, bekommen _alle_ Member
zuerst den Wert 0x01, danach 0x02.

Hat jemand eine Ahnung, woran das liegen kann?
#285471
Lesenswert?

Aehm.
Du hast keine Struktur. Du hast eine Union.
Bei einer Union teilen sich alle Member den Speicherplatz.
Sie ueberlagerb sich sozusagen.

typedef struct {
    OperatingModeType_en         OpMode;
    AdcCtrlTypes_en              AdcCtrl;
    DigitalCaptureConfigType_t   DigCap;
    AnalogueCaptureConfigType_t  AnaCap;
} SystemConfigurationType_t;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren