Hardware Reference
In-Depth Information
Nach diesem Prinzip arbeitet der Parser des Beispielgeräts. Die Vergleichsoperatio-
nen laufen immer nur in eine Richtung, nämlich vorwärts. Kein Zeichen wird zum
Vergleichen öfter als einmal adressiert. Die Vergleichstabellen sind damit zwar etwas
unübersichtlich, aber dafür arbeitet kein Parser schneller als dieser. Das Erweitern
des Befehlssatzes beschränkt sich für den Anwender auf zwei Vorgänge: Erstens
muss der Befehl entsprechend den Vorschriften in die Struktur der Vergleichstabelle
aufgenommen werden und zweitens muss das Befehlsunterprogramm entworfen
werden. Diese Erweiterung kann in einer sehr frühen Phase getestet werden, denn
in der ersten lauffähigen Version reicht z. B. ein Befehlsunterprogramm mit der fol-
genden Struktur:
;******************************************************************************
; *ESE? Standard Event Status Enable Query
;******************************************************************************
ese?
nop
return
Bereits in diesem Zustand kann getestet werden, ob der Parser den Befehl richtig
erkannt hat, indem mit einem Debugger ein Breakpoint auf nop“ gesetzt wird.
WennderProgrammablaufhierankommt,istderneueBefehlrichtigindieTabel-
lenstruktur eingepflegt. Der Entwickler kann sich dann in aller Ruhe daranmachen,
das Unterprogramm mit Leben zu füllen. Abschließend soll nun noch die Frage
geklärt werden, wie der Parser das Befehlsunterprogramm überhaupt aufrufen
kann, obwohl die Architektur der PIC-Derivate kaum Computed Gotos erlaubt.
10.6.4 Stack-Manipulationen
Um die beiden Bytes aus der Tabelle, die die Startadresse eines Befehlsunterpro-
gramms bezeichnen, als neuen Inhalt des Program Counters zu laden, ist eine
Manipulation des Stack notwendig. Die PIC18 MCUs verfügen über eine Möglich-
keit, die Inhalte des Stack Pointers und den Top of Stack zu verändern. Mit dieser
Methode wird der Programmablauf umgeleitet. Im folgenden Programmsegment
mit dem Namen „compute_command“ ist dieses realisiert. Zunächst werden alle
Interruptquellen abgeschaltet, damit nicht ein Interrupt den Stack verändert, indem
die Interrupt Service Routine aufgerufen wird, während gerade das unten ange-
führte Programmsegment seinerseits den Stack manipuliert. Die Auswirkungen
wären fatal. Für jeden Fernsteuerbefehl existiert ein eigenes Unterprogramm, das
aufgerufen werden soll, wenn der Parser einen Befehl als gültig erkannt hat. Deswe-
gen muss zunächst definiert werden, an welcher Stelle im Programmspeicher wei-
tergearbeitet werden soll, wenn das Befehlsunterprogramm wieder verlassen wird.
Dieser Wiedereintrittspunkt erhielt die symbolische Adresse „get_here“. Also wird
Search WWH ::




Custom Search