Hallo zusamman, ich habe ein kleines Problem beim interpretieren des folgenden codes: #define FLASH_PROGRAM_ADDR(x) \ (*(volatile unsigned long *)(void *)(&__IPSBAR[(0x04000000 + (x))])) was geschieht da genau?? kann mir da vielleicht jemand helfen? Vielen Dank! Gruss Roman
&__IPSBAR[(0x04000000 + (x))] ergibt die Adresse des Array-Elementes 0x04000000 + (x) (void *) (&__IPSBAR[(0x04000000 + (x))]) erzeugt einen void-Pointer auf die Adresse (volatile unsigned long *)(void *)(&__IPSBAR[(0x04000000 + (x))]) castet den void-Pointer in einen volatile unsigned long Pointer um (*(volatile unsigned long *)(void *)(&__IPSBAR[(0x04000000 + (x))])) dereferenzeirt den Pointer, d.h. es gibt den Inhalt der Adresse zurück, auf die der Pointer zeigt.
hallo uhu, vielen dank für die sofortige hilfe! aber nun kommt die frage warum ist es von vorteil zuerst ein Void-Pointer zu machen und diesen dann in einen volatile unsigned long pointer zu casten? wäre da ein einfacher volatile unsigned long pointer nicht möglich? Gruss Roman
Ich vermute mal, daß unter C++ ein Cast vom typ von __IPSBAR nach volatile unsigned long * unzulässig ist. Versuch doch einfach mal, den (void *)-Cast wegzulassen...
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.