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?
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.