Forum: Mikrocontroller und Digitale Elektronik Speichern eines Wertes in ein Register


von elik12 (Gast)


Lesenswert?

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?

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Ich würde mal vermuten so:
1
*0xFF15 = 0x25;

von elik12 (Gast)


Lesenswert?

Für was steht das * ?

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Das Sternchen sagt, dass der dahinterstehende Ausdruck die Adresse eines 
Registers ist, glaube ich.

von Dominic R. (dominic)


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

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

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...

von Ronny (Gast)


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.

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
Noch kein Account? Hier anmelden.