2.9 Speicheraufbau

Der PV enthält einen (zumindest dazu kompatiblen) "Intel" 80186er-Prozessor...

Dieser kann 1MB Speicher Adressieren, aber:
- Mit einem Word (16 Bit) kann man nur 65536 Bytes Adressieren
-> Wir brauchen dafür 20 Bit...
Also haben wir zusätzlich 4 Bit (1 halbes Byte), die zusätzlich sind...
Diese 4 Bit werden in einem weiterem Word (16Bit) gespeichert...
Fragt mich jetzt nicht, wie die auf die Idee gekommen sind...

Jedenfalls hat man beim Adressieren ein Segment und ein Offset:

Die wirkliche (physikalische) Adresse im Speicher errechnet sich durch:

phys.Addr= 16*Segment+Offset;

Es gibt so mehrere Möglichkeiten ein und die selbe physikalische Adresse darzustellen, was für das Speichermanagement von Vorteil ist...

Am Beispiel (Hexdezimal) läßt sich das gut zeigen, da dann die 4 Bit genau einem Zeichen entsprechen:

Darstellung: "1000h:01DDh" heißt: Segment=1000h und Offset=01DDh

Okay... Nehmen wir an die physikalische Adresse 01000h sei durch Segment/Offset darzustellen, um verwendet werden zu können:

0000h:1000h ist eine Möglichkeit
0001h:0FF0h ist eine weiter Möglichkeit
0002h:0FE0h ist noch eine...
0003h:0FD0h ist noch eine...
.
.
.
0100h:0000h ist noch eine Möglichkeit

Zwei der Möglichkeiten sind aber wahrscheinlich:

0000h:1000h => Wenn dem Programm das Segment 0000h zugewiesen wurde und das Programm auf genau diese 64KB zugreifen dürfen soll - wenn es nur dieses Segment zum Adressieren benutzt, kann es nicht Ausversehen irgendwelche anderen Daten überschreiben...

0100h:0000h => Wenn das Programm zum Beispiel ein Array an dieser Adresse hat (beispielsweise den Bildspeicher), dann kann man als "Offset" einfach die relative Anzahl Bytes vom Arraybeginn "eintragen", welches sich durch:

Offset=Elementgrößte(in Bytes)*Nummer_des_Elements

berechnen läßt... Daß wäre bei er oberen Variante auch möglich, aber man muß dann zusätzlich zum Offset 1000h addieren...

Wie kann der PV 4MB und mehr verwalten, wenn er nur 1MB adressieren kann?


Das ist relativ einfach: er kann nicht auf die ganzen 4MB gleichzeitig zugreifen! - Soviel sei schonmal gesagt... Deswegen können die PV-Programme auch nur "nacheinander" laufen und haben eine 128KB Begrenzung...

Der PV blendet immer nur ein paar 64KB-Blöcke des Flash-Speichers an bestimmten "Adressen" in den Speicher ein... Mit diesen Adressen kann der Prozessor arbeiten... Und wenn ein anderer Teil (Block) des Flash-Speichers benötigt wird, dann wird der "angezeigte" Block umgeschalten, wobei dann ein anderer dafür "verschwindet"...

Beispiel:
64KB (80000h-8FFFFh) => 1. 64KB Segment für PV-Addin-Programmcode/Static far Vars (Flash-ROM)
64KB (90000h-9FFFFh) => 2. 64KB Segment für PV-Addin-Programmcode/Static far Vars (Flash-ROM)

(Siehe auch oben im der "Speichertabelle")

An diesen Addressen wird im allgemeinen jedes PV-Addin "eingeblendet", es kann auf den restlichen RAM, sowie auf den Grafikspeicher zugreifen...
Verändern kann man den Flashspeicher nicht einfach so! (jedenfalls nicht wie RAM) Der Flash-ROM muß blockweise (ich glaube in 2KB-Blöcken) erst gelöscht ("formatiert") und dann programmiert werden... und das dauert...

Für Ergänzungen wenden Sie sich bitte an: Jürgen Wagner