Gast
#742121
Hallo, wie schon in dem uShell-Thread angedeutet, stelle ich (trotz androhung von Punktabzug bei Verwendung von Zeiger-Schweinereien :-)) hier mal die neue Version meines Parsers vor. Dieser Parser ist deutlich einfacher aufgebaut. Im Gegensatz zum 1. Parser wird hier ein Eingangsbuffer benötigt. Auch werden nicht, wie im ersten Parser, die Tokens sukzessive ermittelt, sondern schlicht und ergreifend einfach alles in der Command-Liste durchsucht. Durch diese beiden Einschränkungen kann der Parser auf 1 einzige Funktion reduziert (mit integrierter Hilfe sinds etwas mehr) werden. Weiters sind eine intergrierte Hilfe implementiert (die sich über den Compilerschalter PARSE_USE_HELP deaktivieren lässt), und wie schon im ersten Parser die sogenannten Value-Codecs. Durch Verwendung eines Eingangsbuffers haben die Value-Codecs auch deutlich mehr Möglichkeiten. Die Parameterübergabe des Parsers an die aufzurufenden Funktionen erfolgt, anders als im alten Parser, über einen Datentyp, in dem eine fest definierte Anzahl von Parametern enthalten sind. Diese Parameter sind Unions in denen Platz für die Daten der Value-Codecs ist. Der Präprozessor (und damit auch das Gemüt der Leute die sich diesen Code evtl. antun :-)) wird in diesem Parser nicht so sehr strapaziert. Allerdings konnte ich mir (nach einigen Überlegungen) es doch nicht nehmen lassen die Konfiguration des Parsers ebenfalls in einem separaten Konfigurations-File abzulegen. Die Konfiguration in uParse_cfg.h erfolgt in folgenden Abschnitten : - PARSE_DATA_UNION Hier wird der Union-Datentyp für die Parameterübergabe definiert. Die Variable ucType entspricht dem Value-Codec der aufgerufen wurde. - PARSE_COMMAND_FUNC Hier werden externals für die, per Command, aufzurufenden Funktionen definiert. Beispiel : extern void vTest (UCHAR ucCmd, T_CMD_DATA_ELEMENTS *pstElements); Mit #define PARSE_USE_HELP in diesem Abschnitt kann die Hilfe mitcompiliert werden. - PARSE_LIST_FUNC Hier kann dem Makro vParserWriteChar(x) eine Funktion zum Ausgeben von Zeichen zugeordnet werden, damit die integrierte Hilfe genutzt werden kann. - PARSE_CODEC Hier werden die Funktionen der Value-Codecs eingetragen. Weiterhin kann für die Auflistung ein Text zum jeweiligen Codec angegeben werden. - PARSE_COMMAND Hier stehen alle Befehle die der Parser erkennen kann. Die Value Codecs werden über die Binärzeichen \x01 - max \x1F aufgerufen (in der reihenfolge in der sie in PARSE_CODEC definiert wurden). Zum Demo : Das Demo ist für einen ATMega32 (lag gerade so langweilig herum :-). Man benötigt nur eine RS232 und eine Systemfrequenz von 11.0592 MHz (ansonsten muß man anpassen, ist aber nicht viel) und man kann ein paar befehle per rs232 testen (inkl. help) Diese Version des Parsers ist bestimmt noch nicht ganz fehlerfrei. Werde im Laufe der Zeit (hoffentlich nach Feedback :-) korrekturen und neue Versionen reinstellen. Gruß Rene