www.mikrocontroller.net

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


Autor: elik12 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde mal vermuten so:
*0xFF15 = 0x25;

Autor: elik12 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für was steht das * ?

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

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

Autor: Dominic R. (dominic)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.