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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.