Forum: Mikrocontroller und Digitale Elektronik Frage zu einem define


von Markus (Gast)


Lesenswert?

Hallo zusammen,
würde gerne wissen welche aktion mit diesem makro ausgeführt wird.
#define BlaBla(x) (*((volatile uint8   *)(x)))

Schönen Dank für eure Hilfe.
MfG markus

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das übergebene Argument x wird in einen (volatile-) Pointer auf "uint8" 
gecastet und dereferenziert.
1
uint8 Horst;
2
3
BlaBla(1234) = 7;   
4
5
Horst = BlaBla(1234);

von Mikes (Gast)


Lesenswert?

Hi,

dabei handeltes sich um ein casting auf volatile uint8* und eine 
Dereferenzierung des gecasteten Pointers (auslesen des Wertes auf das 
dieser Pointer zeigt).

Bsp.



x= 0x80

a= 0x20
ptr= &a = 0x80

*((volatile uint8   *)(x)) liefert 0x20

von Markus (Gast)


Lesenswert?

Danke

von Unbekannter (Gast)


Lesenswert?

Solche Makros weisen oft auf üblen Code hin...

von yalu (Gast)


Lesenswert?

> Solche Makros weisen oft auf üblen Code hin...

Das dürfen aber die Entwickler der AVR-Libc nicht lesen ;-)

Dort werden nämlich genau solche Konstrukte verwendet, um I/O-Register
zu definieren, was in meinen Augen aber völlig in Ordnung ist.

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.