www.mikrocontroller.net

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


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

#ifdef __cplusplus
  #define     __I     volatile                /*!< defines 'read only' permissions      */
#else
  #define     __I     volatile const          /*!< defines 'read only' permissions      */
#endif
#define     __O     volatile                  /*!< defines 'write only' permissions     */
#define     __IO    volatile                  /*!< defines 'read / write' permissions   */

//die beispiel-struct 
typedef struct
{
  union {
  __I  uint8_t  RBR;
  __O  uint8_t  THR;
  __IO uint8_t  DLL;
       uint32_t RESERVED0;
  };
  union {
  __IO uint8_t  DLM;
  __IO uint32_t IER;
  };
  union {
  __I  uint32_t IIR;
  __O  uint8_t  FCR;
  };
  __IO uint8_t  LCR;
       uint8_t  RESERVED1[7];
  __I  uint8_t  LSR;
       uint8_t  RESERVED2[7];
  __IO uint8_t  SCR;
       uint8_t  RESERVED3[3];
  __IO uint32_t ACR;
  __IO uint8_t  ICR;
       uint8_t  RESERVED4[3];
  __IO uint8_t  FDR;
       uint8_t  RESERVED5[7];
  __IO uint8_t  TER;
       uint8_t  RESERVED6[39];
  __IO uint32_t FIFOLVL;
} 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.