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...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.