Forum: Mikrocontroller und Digitale Elektronik typedef struct...was wird da gemacht?


von Marco Blum (Gast)


Lesenswert?

Hi,
kann mir jemand mit einfachen Worten erklären warum ich überhaupt Struct 
brauche und was genau das hier aufgeführte typedef struct macht was in 
einer header datei stand? Habe mich durchs internet gekämpft aber nichts 
verständliches über struct oder typedef struct gefunden. Jetzt habe ich 
noch ne Frage, was bezweckt bei der #define Anweisung das (can_t*)?
Hoffe jemand hat die richtigen "einfachen" Worte um mir das kurz zu 
erklären.

Gruß Marco
1
typedef struct {
2
  IO_WORD  CTR;       
3
  IO_WORD  STATR;         
4
  IO_WORD  :16;
5
} can_t;
6
7
#ifdef CTR0
8
#  define CAN0  (can_t*) &CTR0
9
#endif

von Falk (Gast)


Lesenswert?

@ Marco Blum

>kann mir jemand mit einfachen Worten erklären warum ich überhaupt Struct
>brauche und was genau das hier aufgeführte typedef struct macht was in
>einer header datei stand? Habe mich durchs internet gekämpft aber nichts

typdef definiert einen Datentyp. Der Datentyp enthält mehrere 
Bestandteile.

>verständliches über struct oder typedef struct gefunden. Jetzt habe ich
>noch ne Frage, was bezweckt bei der #define Anweisung das (can_t*)?

Bin ich mir nicht sicher. Muss ein Profi beantworten.

MfG
Falk

von ARM-Fan (Gast)


Lesenswert?

>> Habe mich durchs internet gekämpft aber nichts verständliches
>> über struct oder typedef struct gefunden.

Das halte ich für ein Gerücht... Aber was solls:

typedef definiert einen neuen Datentypen, der sich ab sofort can_t
nennen darf und wie zu sehen aufgebaut ist (eben eine Struktur mit
unterschiedlichen Mitgliedern).

(can_t *) ist ein CAST und definiert einen Zeiger auf den soeben
definierten Datentypen can_t.

von ARM-Fan (Gast)


Lesenswert?

Mist, zu langsam ;-)

von Marco Blum (Gast)


Lesenswert?

Dann mal vielen Dank für eure Antworten das hat mir gut weitergeholfen. 
Ich hab jetzt nur noch eine Frage, was macht   (IO_WORD  :16;) ? Wozu 
ist der Doppelpunkt?

von ARM-Fan (Gast)


Lesenswert?

Zunächst wäre erst einmal zu klären, was ein "IO_WORD" ist.
Das muß ebendfalls ein eigener Datentyp sein (Stichwort typedef).

Die :16 kennzeichnet ein Bitfeld mit der Größe 16.
Allerdings fehlt da meines Erachtens noch ein Bezeichner.
Kann ich aber nicht 100% sagen, da ich trotz vieler Jahre Programmierung
noch nie in die Verlegenheit gekommen bin so etwas zu benutzen

von ARM-Fan (Gast)


Lesenswert?

Nachtrag: Wie ich mir grad mal angelesen habe, geht es auch ohne 
Bezeichner.
Der letzte Eintrag im Struct füllt also noch 16 Bits als Platzhalter 
auf.

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.