Hardware Reference
In-Depth Information
10.6 Die Funktionsweise des Parsers
Der für das Beispielgerät realisierte Parser beginnt immer damit, das erste Zeichen
nach dem Bulk-OUT Header mit den gültigen Zeichen aus dem Vorrat der Stamm-
ebene zu vergleichen. Sofern das Zeichen kleingeschrieben ist, wird es vor dem Ver-
gleichindenentsprechendenGroßbuchstabenumgewandeltundauchanseinem
Speicherplatz im Bulk-OUT Endpoint als Großbuchstabe eingetragen. Auf diese
Weise muss die Liste der erlaubten Befehle nicht für jedes Zeichen beide Schreib-
weisen enthalten. Damit wird Speicherplatz und Ausführungszeit gespart. Sofern
eine Übereinstimmung festgestellt wird, rückt der Zeiger, der das aktuell zu verglei-
chende Zeichen im Bulk-OUT Endpoint markiert, auf das folgende Zeichen. Die
Tabelle aller gültigen Zeichen der Stammebene enthält für jedes dort eingetragene
Zeichen einen Zeigerwert auf den Kopf derjenigen Tabelle, in der die nächsten gül-
tigen Zeichen abgelegt sind. Der folgende Vergleich wird dann also mit dem mar-
kierten Zeichen im Bulk-OUT Endpoint und der markierten Tabelle durchgeführt.
Sofern eine Übereinstimmung gefunden wurde, wird die zuvor beschriebene Proze-
dur wiederholt. Wenn keine Übereinstimmung vorhanden ist, wird die Programm-
ausführung des Parsers mit einer Fehlermeldung beendet. Die Vergleichsoperation
wird vorläufig beendet, wenn das verglichene Zeichen ein Semikolon oder ein Leer-
zeichen war. In beiden Fällen wird der gefundene Befehl ausgeführt und danach
wird eine neue Vergleichsoperation mit dem verbliebenen Rest an Zeichen im Bulk-
OUT Endpoint gestartet. Nach einem Semikolon wird das darauf folgende Zeichen
als erstes Zeichen eines neuen Befehls interpretiert. Sofern ein Leerzeichen voran-
ging, werden die danach folgenden Zeichen als Parameter interpretiert und verar-
beitet, bis das nächste Schlusszeichen gefunden wird. Falls ein Zeilenvorschub als
Schlusszeichen gefunden wird, wird zunächst der vorangehende Befehl ausgeführt
und danach der Parser beendet, nachdem er initialisiert und damit auf einen Neu-
start vorbereitet worden ist. Nun gibt es aber noch ein Problem. Geräte, die dem
Standard USB488 entsprechen, dürfen nicht davon ausgehen, dass der Host die
Gerätenachrichtenmiteinem0x0AalsASCII-ZeichenfürdenZeilenvorschub
beendet [USB488: 3.2]. In diesem Fall gilt nur die Angabe der mit dem Transfer
übertragenen Nettobytes. Ein robuster Parser muss damit umgehen können. Die
hier kurz umrissene Funktionsweise des Parsers hat den Vorteil, dass kein Zeichen
im Bulk-OUT Endpoint öfter als einmal adressiert und verglichen werden muss.
Damit ist für maximale Verarbeitungsgeschwindigkeit gesorgt. Nachteil dieser
Methode ist jedoch, dass die Listen, die den erlaubten Befehlsvorrat beinhalten,
keine „lesbaren“ Einträge enthalten, wie im Folgenden noch deutlich wird. Damit
wird es für den Entwickler etwas komplizierter, den Befehlsvorrat um neue Befehle
zu erweitern. Ein grundsätzliches Problem, das mit der Architektur des verwende-
ten Mikrocontrollers zusammenhängt, sei hier noch erwähnt. Eine Eigenart der
Search WWH ::




Custom Search