C-Control II Station
Adreßraum und können über globale Variablen relativ einfach Daten austauschen. Die
Frage, ob die C-Control II Unit Multithreading oder Multitasking betreibt, wenn sie eine
Leuchtdiode linken läßt und parallel Daten von der seriellen Schnittstelle empfängt, ist eher
von akademischer als von praktischer Bedeutung. Für den Anwender genügt zu wissen,
daß es funktioniert.
7.4.4 Programm-und Konstantenspeicher
Die maximale Länge des Binärcodes beträgt 128kB. Er findet in zwei Segmenten des
FLASH-ROMs Platz. Die Adressierung eines Binärcodes im Programmspeicher erfolgt
Wordweise über einen 16bit-Offset.
Getrennt vom Programmspeicher nutzt die virtuelle Maschine zwei weitere FLASH-
Segmente für 128kB Konstantenspeicher. Am Anfang des Konstantenspeichers sind die
Initialisierungswerte für jeden Thread des Anwenderprogramms abgelegt. Dann folgen
konstante Zahlenwerte, Tabellen und Strings, die im Programm verwendet werden. Der
Zugriff auf den Konstantenspeicher durch das Anwenderprogramm erfolgt Word-weise
durch spezielle Binärcodes und einen 16bit-Offset.
7.4.5 Datenspeicher
Der dritte Speicherblock ist der Datenspeicher, der sich im externen SRAM der C-Control
befindet. Von den 64kB stehen ca.60kB für Daten des Anwenderprogramms zur
Verfügung, abzüglich des Speicherbedarfes für den Stapelprozessor. Die Adressierung der
Daten erfolgt Byte-weise über einen 16bit-Offset.
7.4.6 Stapelprozessor
Die virtuelle Maschine der C-Control II Station arbeitet als Stapelprozessor. Sie implemen-
tiert nicht wie viele Mikrocontroller und Mikroprozessoren spezielle Rechenregister oder
einen Akkumulator. Statt dessen werden alle Operanden auf einen Stapel (Stack) geladen.
Die Operationen des virtuellen Prozessors manipulieren stets den obersten Wert auf dem
Stapel oder verknüpfen die zwei obersten Werte zu einem Ergebnis. Speicheroperationen
nehmen einen Wert vom Stapel und legen ihn an einer Adresse im Datenspeicher ab. Der
Stapelprozessor der C-Control II unterstützt Rechenoperationen mit vorzeichenbehafteten
16Bit-und 32Bit-Integerwerten sowie mit 64Bit-Fließkommazahlen. Bytes werden immer als
16Bit-Integer verarbeitet. Der Stapel dient auch als Zwischenspeicher für lokale Variablen
von Threads und Unterfunktionen sowie zur Übergabe von Parametern und
Rückgabewerten beim Aufruf von Unterfunktionen. Außerdem werden Rücksprungadresse
und Speicherkontext (BP) vor einem Funktionsaufruf auf dem Stapel gesichert und beim
38