Hallo zusammen, bin noch Anfänger in Microcontroller und ich möchte den Wert 0x25 in das Register 0xFF15 speichern. Wie muss ich das in der Programmiersprache C machen?
Das Sternchen sagt, dass der dahinterstehende Ausdruck die Adresse eines Registers ist, glaube ich.
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
Ah, O.K. Das ist mal eine sehr gute Erklärung. Ich war mir selbst nicht sicher ob "mein" Code klappen würde. Ich wusste, dass es so klappen würde wie du es beschrieben hast, dachte aber, man könne den Schritt einen Pointer zu casten weglassen...
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.
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.