RAM / Speicherzugriff Grundlagen

Gast #3158863
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?
Gast #3158879
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.
Gast #3158887
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ß.
Gast #3158919
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.