Gast
#675229
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?
|
Anzeige
|
Speichern eines Wertes in ein Register
Gast
#675229
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? Ich würde mal vermuten so:
Gast
#675234
Für was steht das * ? 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...
Gast
#675305
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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|