www.mikrocontroller.net

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


Autor: Marco Blum (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
typedef struct {
  IO_WORD  CTR;       
  IO_WORD  STATR;         
  IO_WORD  :16;
} can_t;

#ifdef CTR0
#  define CAN0  (can_t*) &CTR0
#endif

Autor: Falk (Gast)
Datum:

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

Autor: ARM-Fan (Gast)
Datum:

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

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist, zu langsam ;-)

Autor: Marco Blum (Gast)
Datum:

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

Autor: ARM-Fan (Gast)
Datum:

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

Autor: ARM-Fan (Gast)
Datum:

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

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.