Forum: Mikrocontroller und Digitale Elektronik RAM / Speicherzugriff Grundlagen


von Michi (Gast)


Lesenswert?

Hallo,

Ich bräuchte noch etwas Grundlagen in genereller RAM Eprom bzw. 
Speicheradressierung.

Eigenlich glaube ich habe ich die Funktion verstanden aber irgendwo habe 
ich dann doch noch ein Verständnissproblem.

Ich lege an einen Speicherbaustein ein Adressierungsmuster an und 
erhalte dann auf den Datenleitungen den Inhalt der Speicherstelle?

Um es einfach zu halten reden wie einfach mal um einen ZX81:
http://www.womoteam.de/ftp/zx81_schematic.jpg

Dort ist RAM verbaut, 2114 1Kx4, was bedeutet diese Angabe, Busbreite, 
also Adressbeite? Wie würde eine Tabelle aussehen welche die gleiche 
Struktur hat, denke das würde ich mir dann vostellen können.

Das andere ist ja wenn ich den Inhalt des RAMs wissen will muß ich ja 
wissen wo der Inhalt steht, wo lege ich diese Daten ab? Das würde sich 
ja erst ab einer Datenmenge rentieren welche größer ist als Start und 
Ende der Adresse des Speicherinhaltes, oder habe ich da ein 
Verständnissproblem?

von Svenska (Gast)


Lesenswert?

Der RAM-Baustein hat Adressleitungen und Datenleitungen.

Die Angabe 1Kx4 heißt, dass er 1K (=1024) Adressen (=10 Bit) hat und für 
jede Adresse einen Datensatz aus 4 Bit speichern kann.

Also in einer Tabelle:

Adresse Datum
0x000   0x4
0x001   0x5
0x002   0xF
...
0x3FF   0x0

Wie du die Daten im RAM adressierst, ist deine Sache und eine Frage der 
Organisation. Im einfachsten Fall hast du ab Adresse 0x000 deine 
Verwaltungsstrukturen, die dir verraten, wo du ein gewisses Datenwort 
findest.

von Michi (Gast)


Lesenswert?

Ok, danke
Angenommen ich will Texte auf einem LCD anzeigen und diese Text in ein 
EEProm ablegen, "Hallo Welt" steht dann z.b. in 0x10-0x1A

Wo in meinem C-Programm lege ich 0x10 und 0x1A ab? In Variablen? Dann 
bräuchte ich ja für jeden Textblock den ich aus dem EEProm lesen will 2 
Hexadressen im schlimmsten fall bei dem Beispiel RAM 0x3FF groß.

von B. S. (bestucki)


Lesenswert?

Michi schrieb:
> Wo in meinem C-Programm lege ich 0x10 und 0x1A ab? In Variablen? Dann
> bräuchte ich ja für jeden Textblock den ich aus dem EEProm lesen will 2
> Hexadressen im schlimmsten fall bei dem Beispiel RAM 0x3FF groß.

Bei Strings reicht die Startadresse, wenn du sie mit dem Nullzeichen 
terminierst.

von Svenska (Gast)


Lesenswert?

Das Konzept, was du suchst, nennt sich "Pointer". :-)
Der enthält nämlich genau eine Adresse und "zeigt" auf eine Adresse bzw. 
einen "Ort" im RAM-Baustein, wo du deine Daten findest.

Wenn du bedenkst, dass dein 'Hello World\0' irgendwie 12 Bytes benötigt, 
dann sparst du mit dem Pointer (gerundet 2 Byte) schon 10 Bytes; bei 
längeren Texten wird das deutlich mehr. Wenn du jetzt Funktionen mit 
diesem Text aufrufen möchtest, kopierst du nicht mehr den gesamten Text 
in die Funktion (call by value), sondern nur noch den Pointer (call by 
reference) - das spart Zeit. Du hantierst also nur noch mit den 
Adressen, nicht mehr mit den eigentlichen Daten (außer beim 
Lesen/Schreiben natürlich).

Du musst nur bedenken, dass diese Pointer unter Umständen (je nach 
Hardware) in verschiedene Adressräume zeigen können, also die Adresse 
0x000 im EEPROM einen anderen Wert hat, als im internen RAM des 
Controllers oder im Flash.

von (prx) A. K. (prx)


Lesenswert?

Der Vorläufer war interessanter, zumal er ausschliesslich aus 
dokumentierten Komponenten aufgebaut war: 
http://nocash.emubase.de/zx80-sch.gif

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.