Speicherzuweisung

Gast #3029111
Lesenswert?

Hallo Elektronikkollegen,

ich habe eine etwas dümmliche frage, bin aber kurz vor dem Verzweifeln.
ich nutze das ASF.
Dabei habe ich verschiedene Funktionen die register beschreiben.
Zum Beispiel:
dacifb->cr |= (AVR32_DACIFB_CR_BOE_MASK);
(ich weiß ist nicht die funktion sondern nur die Zuweisung)
hier soll das ControlRegister des DACIFB Ínterfaces beschrieben werden.
Klappt auch alles wunderbar.
Da ich es aber komplett verstehen will und nicht einfachn nur zufrieden 
bin, weil es "funktioniert", würde ich gerne wissen wo die  Variable 
dacifb->cr, dem genauen Speicherort zugewiesen wird.
An der Stelle an der das Struct definieert wird, kann ich nichts finden.
ich hoffe ihr könnt mir helfen.

Lieben Gruß

Michael
#3029308
Lesenswert?

Micha schrieb:

> An der Stelle an der das Struct definieert wird, kann ich nichts finden.
> ich hoffe ihr könnt mir helfen.

Du musst unterscheiden, wie und wo dacifb seinen Wert bekommt und dem, 
was sich an dieser Stelle im Speicher befindet.

dacifb wird einfach nur ein Pointer sein, der irgendwie einen 
numerischen Wwert zugewiesen bekommt.

Und dann wird der Compiler (mit einem Cast) so ausgetrickst, dass er an 
dieser Stelle im Speicher, diesem dort befindlichen Byte mittels der 
Struktur einen Bitaufbau mit benannten Bits zuweist.

Das ist nichts anderes als eine Aufbaubeschreibung mittels einer 
Struktur und dem umcasten eines Pointers auf diese Strukturbeschreibung. 
Der Cast besagt "tu einfach mal so, als ob an dieser Stelle im Speicher 
sich so ein Ding befinden würde"
#3029354
Lesenswert?

Micha schrieb:
> würde ich gerne wissen wo die  Variable
> dacifb->cr, dem genauen Speicherort zugewiesen wird.

Garnicht.
Irgendwo wird eine Struct definiert, die das Element "cr" enthält.
Irgendwo wird ein Pointer des Typs dieser Struct angelegt.
Und irgendwo wird diesem Pointer "dacifb" die Adresse einer Variable des 
Typs dieser Struct zugewiesen.

Es kann auch sein, daß es weder den Pointer noch die Variable wirklich 
gibt. Sondern eine IO-Adresse (integer-Zahl) wird nur zu einen Pointer 
auf eine Variable des Typs dieser Struct gecastet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren