mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik M16C NC30 wie lese ich den RAM aus


Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin mir gerade dabei am überlegen wie auf den Ram schreiben und wie ich 
etwas aus dem RAM lesen. Finde jedoch leider keine anschauliche 
Erklärung wie das mit NC30 und dem M16C funktionieren soll. Weiss jemand 
was?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Gerd (Gast)

>Bin mir gerade dabei am überlegen wie auf den Ram schreiben und wie ich
>etwas aus dem RAM lesen.

Indem man einfach Variablen bzw. Arrays anlegt und darauf zugreift?

> Finde jedoch leider keine anschauliche
>Erklärung wie das mit NC30 und dem M16C funktionieren soll.

So wie auf jedem C-Compiler!

MfG
Falk

Autor: Judge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So geht das:
unsigned char test;

test = *((unsigned char*)0x0400);

Damit wird das Byte an der Adresse 400h in die Variable test eingelesen. 
Schreiben funktioniert vom Prinzip her genauso.

Gruß
Judge

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Renesas-Compiler hat schon einige Unterschiede zu anderen Compilern 
...
#pragma ADDRESS Buffer 060000H;
unsigned char far Buffer[SIZE];

definiert z.B. ein Array mit der Größe SIZE, das ab Adresse 60000H im 
externen RAM liegt. In diesem Zusammenhang ist das Schlüsselwort "far" 
wichtig, das den Adressraum auf 20 Bit (anstelle 16 Bit) ausweitet.

Zugriffe auf das interne RAM (unterhalb 0FFFFH) brauchen das nicht:
#pragma ADDRESS InternalRAM 01000H;
unsigned char InternalRAM[SIZE];

Natürlich kann man sich auch einen Pointer definieren und hinterher 
entsprechende Adressen zuweisen (hier das "far" in den oberen 
Speicherseiten nicht vergessen!)

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stimmt dann der Zugriff von Judge?

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich das richtigt verstanden habe laut Manual geht es bei Pragma und 
per Zeiger. Bräuchte mal ein Beispiel ... danke

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal im R8C - Forum von Elektor vorbei.

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gerd: Wenn Du mein Beispiel von oben verwendest, kannst Du direkt, auch 
ohne Zeiger zugreifen.
value = Buffer[0];

liest dann den Inhalt der Speicherstelle an Adresse 060000H,
value = Buffer[10];
entspricht 06000AH, usw.

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke

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.