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
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); |
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.