Forum: Mikrocontroller und Digitale Elektronik Union innerhalb von typedef struct (LPC Lib)


von Steffen (Gast)


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

von (prx) A. K. (prx)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.