Union innerhalb von typedef struct (LPC Lib)

Gast #1973114
Lesenswert?
• ▲
▼
Hi,

hab mir grad die Examples für die LPC17xx Reihe angeschaut und bei denen 
wird innerhalb eine struct eine union definiert ohne Bezeichner... 
Trotzdem läuft das ganze fehlerfrei durch, wie funktioniert das oder hab 
ich was wichtiges übersehen?

1
#ifdef __cplusplus
2
  #define     __I     volatile                /*!< defines 'read only' permissions      */
3
#else
4
  #define     __I     volatile const          /*!< defines 'read only' permissions      */
5
#endif
6
#define     __O     volatile                  /*!< defines 'write only' permissions     */
7
#define     __IO    volatile                  /*!< defines 'read / write' permissions   */
8

9
//die beispiel-struct 
10
typedef struct
11
{
12
  union {
13
  __I  uint8_t  RBR;
14
  __O  uint8_t  THR;
15
  __IO uint8_t  DLL;
16
       uint32_t RESERVED0;
17
  };
18
  union {
19
  __IO uint8_t  DLM;
20
  __IO uint32_t IER;
21
  };
22
  union {
23
  __I  uint32_t IIR;
24
  __O  uint8_t  FCR;
25
  };
26
  __IO uint8_t  LCR;
27
       uint8_t  RESERVED1[7];
28
  __I  uint8_t  LSR;
29
       uint8_t  RESERVED2[7];
30
  __IO uint8_t  SCR;
31
       uint8_t  RESERVED3[3];
32
  __IO uint32_t ACR;
33
  __IO uint8_t  ICR;
34
       uint8_t  RESERVED4[3];
35
  __IO uint8_t  FDR;
36
       uint8_t  RESERVED5[7];
37
  __IO uint8_t  TER;
38
       uint8_t  RESERVED6[39];
39
  __IO uint32_t FIFOLVL;
40
} LPC_UART0_TypeDef;

Hab es bei einem eigenen Beispiel ausprobiert, und hab überall statt __I 
etc. volatile hinzugefügt - und prompt kommen die erwarteten 
Fehlermeldungen (bei den unions).
"warning: expected an identifier"

Gruß
Steffen
#1973155
Lesenswert?
• ▲
▼
Steffen schrieb:

> hab mir grad die Examples für die LPC17xx Reihe angeschaut und bei denen
> wird innerhalb eine struct eine union definiert ohne Bezeichner...

Normal. Nennt sich "anonymous union". Deren Komponenten können direkt 
als Komponenten der umgebenden struct angesprochen werden. Müssen darin 
natürlich eindeutig sein.

Was die Fehlermeldung angeht: Nicht in Prosa beschreiben, was du gemacht 
hast, sondern den resultierenden Code zeigen.

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.