Speichern eines Wertes in ein Register

#675275
Lesenswert?

Der * dereferenziert einen Pointer - aus diesem Grund funktioniert Alex' 
Code auch nicht, da 0xFF15 eben kein Pointer ist.

Funktionieren würde z.B.:

*(uint16_t*)0xFF15 = 0x25;

0xFF15 wird als Pointer auf einen 16-bit Wert gecasted, und dieser 
Pointer dereferenziert. Ein dereferenzierter Pointer ist ein gültiger 
l-value, ein Wert, der eine Adresse hat, und diesem kam man etwas 
zuweisen (z.B. 0x25).

Das Beispiel zeigt dann auch gleich die andere Bedeutung des *:
<TYPE>* stellt einen Pointer auf ein "Objekt" dieses <TYPE> dar.

Gruß,

Dominic
Gast #675305
Lesenswert?

Zu sagen wäre noch, dass das ganze die Speicherstelle 0xFF15 im Ram 
anspricht.Wenn das Register nicht gerade an diese Stelle ins Ram gemappt 
wird,kommen auch keine Daten dort an. Desweiteren können 
Special-Function Register, Allzweckregister und I/O-Ports durchaus auf 
einigen Controllertypen auch garnicht mit normalen Speicherzugriffen 
erreicht werden.Dann muss dem Compiler noch gesagt werden,welchen 
Speichertyp der Pointer anspricht.

Bei Harvard-Architekturen ist zudem auch der Programmspeicher nicht per 
Datenpointer erreichbar.

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