RAM / Speicherzugriff Grundlagen

Gast #3158863
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
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
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ß.
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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.