e4thcom - Ein Terminal für embedded Forth-Systeme
Copyright (C) 2013 Manfred Mahlow
e4thcom ist freie Software gemäß der GNU General Public License Version 3.
Zusammenfassung
e4thcom ist ein minimalistisches Terminalprogramm für embedded Forth-Systeme welches das Hochladen von Quelltextdateien unterstützt. Das Hochladen wird durch Terminaldirektiven angestoßen, die am Terminal eingegeben oder in Quelltextdateien eingefügt werden.
Forth auf Mikrocontrollern
Forth auf Mlkrocontrollern hat den großen Vorteil der Interaktivität. So reicht schon ein einfaches Terminalprogramm aus, direkten Kontakt zum System aufzunehmen und seine Struktur und Funktionalität zu erkunden.
Ist man dann aber so weit, dass man erste Programme schreiben und testen kann, vermisst man die Möglichkeit, den in Dateien gespeicherten Quelltext zum Forth-System hochladen zu können. Hier kommt nun e4thcom ins Spiel.
e4thcom Terminal
e4thcom ist ein minimalistisches Terminalprogramm für das Linux OS, das Terminaleingaben ohne lokales Echo direkt an das Forth-System (Zielsystem) sendet und vom Zielsystem empfangene Zeichen im Terminalfenster ausgibt. Das ist der Terminalmodus des Programms.
Gibt man im Terminalmodus als erstes Zeichen # ein, gelangt man in den Steuerungsmodus und kann Terminaldirektiven eingeben. Die eingegebenen Zeichen werden dann nicht zum Zielsystem gesendet sondern zwischengespeichert und nach Drücken der Eingabetaste vom Terminalprogramm als Direktive interpretiert.
Terminaldirektiven
Für das Hochladen von Quelltext werden in Analogie zu den Wörtern include und require des Forth Standards die Direktiven #include und #require unterstützt. Sie erwarten die Angabe der zu ladenden Quelltextdatei als einzigen Parameter:
#include <Dateiname> \ unbedingtes Hochladen
#require <Dateiname> \ bedingtes Hochladen
Beide Direktiven können auch in Quelltextdateien eingefügt werden - eine Direktive pro Zeile, der Rest der Zeile wird ignoriert - so dass beim Hochladen einer Datei automatisch weiterer Quelltext aus anderen Dateien eingefügt werden kann.
Die angegebene Quelltextdatei wird im Pfad
cwd:cwd/target:cwd/lib gesucht. cwd ist das Verzeichnis, das zum Zeitpunkt des Programmstarts das aktuelle Verzeichnis (current working directory) war. Dem liegt die Idee zugrunde, projektspezifischen Quelltext im cwd zu gespeichern, targetspezifischen Quelltext unter cwd/target und target- und projektunabhängigen Quelltext unter cwd/lib.
Werden die Direktiven am Terminal eingegeben, können auch die Kurzformen #i und #r verwendet werden.
Neben den Terminaldirektiven für das Hochladen von Quelltextdateien können je nach Zielsystem weitere Direktiven definiert sein. Angaben dazu finden sich im Hilfetext für das jeweilige Zielsystem.
Hochladen von Quelltext
Beim Hochladen wird der Text zeilenweise aus der Quelltextdatei gelesen und entweder als Terminaldirektive interpretiert oder als Quelltext zum Forth-System übertragen.
Nach dem Senden eines Zeichens wird auf ein Echo gewartet und dann das empfangene Zeichen im Terminalfenster ausgegeben. Bleibt das Echo aus, wird die Übertragung mit einer Fehlermeldung abgebrochen.
Nach der Übertragung einer Zeile wartet das Terminal auf die ok-Meldung des Zielsystems. Kommt diese, wird das Hochladen mit der nächsten Zeile fortgesetzt. Kommt sie nicht, wird das Hochladen mit einer Fehlermeldung abgebrochen.
Reine Kommentarzeilen werden nicht hochgeladen sondern nur im Terminalfenster ausgegeben.
Wird das Ende einer Quelltextdatei erreicht, wird diese geschlossen und zur aufrufenden Ebene zurückgekehrt. Sind alle Dateien geschlossen, wird wieder der Terminalmodus aktiviert.
Das bedingte Hochladen von Quelltext wurde, ausgehend von der Forderung, dass alle dafür erforderlichen Informationen nicht vom Terminal sondern im Zielsystem gespeichert werden und das Zielsystem möglichst wenig belastet wird, wie folgt implementiert:
- Vor dem Hochladen wird geprüft, ob im Wörterbuch des Zielsystems bereits ein Wort mit dem Namen der hochzuladenden Datei existiert. Ist das der Fall, wird die Direktive ignoriert. Ist das nicht der Fall, wird die Datei hochgeladen.
- Nach dem Hochladen wird erneut geprüft, ob ein Wort mit dem Namen der Datei im Wörterbuch existiert. Ist das nicht der Fall, wird im Wörterbuch ein NOOP-Wort mit dem Namen der Datei erzeugt .
Man kann also die Zahl der ins Wörterbuch einzutragenden Dateinamen minimieren, indem man, immer dann, wenn es Sinn macht, als Dateinamen den Namen eines Wortes verwendet, das in der Datei definiert ist.
e4thcom starten
Zum Starten von e4thcom öffnet man ein Terminal im jeweiligen Projektverzeichnis und gibt dort das Kommando
/path/to/e4thcom [-i target [options]]
ein.
Folgende Argumente werden unterstützt:
-i [4e4th, amforth, mecrisp] Angabe des Zielsystems
-b [B1200, B2400, B4800, B9600, B19200, B38400, B57600, B115200] Baudrate für die Datenübertragung
-d [device] Serielles Device für die Datenübertragung, z.B. ttyS0, ttyUSB0, ttyACM0
-h Hilfetext anzeigen
Für die Optionen sind im Programm Standardwerte voreingestellt, die durch die Angaben auf der Kommandozeile überschrieben werden können.
Unmittelbar nach dem Programmstart wird die Verbindung zum Zielsystem hergestellt. Schlägt das fehl, weil das angegebene Device nicht existiert oder noch von einem anderen Prozess (z.B. dem Modemmanager des OS) belegt ist, wird das Programm mit einer Fehlermeldung beendet. Nach Beheben der Fehlerursache oder kurzem Warten, bis der Modemmanager aufgibt, sollte dann ein erfolgreicher Programmstart möglich sein.
Babel ...
Da Forth-Systeme bei der Datenübertragung unterschiedliches Antwortverhalten haben, ist das Programm in einen Forth-Kern (e4thcom) und mehrere Imagedateien gegliedert; je eine Imagedatei pro Zielsystem (4e4th.i, amforth.i, mecrisp.i).
With a little help ...
e4thcom bietet keine erweiterten Editiermöglichkeiten für die Kommandozeile und auch keine Kommandozeilenhistorie. Es ist bewusst einfach gehalten. Man kann es aber - ganz in UNIX-Tradition - mit einem Tool kombinieren, das die fehlenden Eigenschaften hinzufügt. Ein solches Tool ist z.B. die ForthBox.
ForthBox
Die ForthBox ist ein GTK+ GUI für Forth-Interpreter und Forth-Terminals, ein Terminalemulator, ergänzt durch Dateiauswahldialoge für das Editieren und Ausführen von Forth-Quelltextdateien.
In einem Einstellungsdialog kann der Anwender die zu startende Terminalanwendung, das Projektverzeichnis, den zu verwendenden Editor und die Parameter für eine serielle Verbindung auswählen.
Um e4thcom in einer ForthBox zu starten, ist der Befehl
/path/to/e4thcom -i forthbox
einzugeben.
Unmittelbar nach dem Programmstart wird der Einstellungsdialog geöffnet. Nach Auswahl der gewünschten Optionen und drücken des OK-Knopfes wird e4thcom für das ausgewählte Zielsystem im Terminalfenster gestartet. Schlägt das aus den oben genannten Gründen fehl, kann man, gegebenenfalls nach Anpassen der Einstellungen, das Terminalprogramm erneut starten, wie nachfolgend beschrieben.
Zur Verwendung der ForthBox hier nur noch ein paar kurze Hinweise:
- Über die Werkzeugleiste kann man mit den Knöpfen Bearbeiten bzw. Ausführen eine Datei zum Bearbeiten bzw. zum Ausführen/Hochladen auswählen.
- Neben den Knöpfen gibt es jeweils einen Menü-Knopf, über den man auf die vom OS geführte globale Liste der zuletzt benutzten Dateien zugreifen kann. Hier erscheinen auch alle Dateien, die zum Bearbeiten ausgewählt werden.
- Eine zum Bearbeiten ausgewählte Datei wird nach dem Schließen des Auswahldialogs an den externen Editor übergeben, der im Einstellungsdialog ausgewählt wurde.
- Über den ersten Eintrag in der Liste zum Knopf Ausführen kann man den jeweiligen Terminal-Client neu starten.
- Unter dem Terminalfenster kann eine separate Kommandozeile mit automatischer Textauswahl (Historie) und automatischer Textvervollständigung aktiviert werden (Check-Button) rechts unten).
Was noch zu tun ist:
Device-Locking hinzufügen. Bisher wird vor dem Öffnen der seriellen Schnittstelle nicht geprüft, ob das Device bereits von einem anderen Prozess verwendet wird.
Hier zeichnet sich aber das Problem ab, dass nicht alle Programme, die serielle Schnittstellen verwenden, Device-Locking verwenden bzw. es auf die gleiche Weise tun.
Anmerkungen:
e4thcom wird als freie Software gemäß der GNU General Public License Version 3 OHNE JEDE GEWÄHRLEISTUNG zur Verfügung gestellt.
e4thcom ist in MINFORTH Plus implementiert, einem MINFORTH Derivat und wurde mit folgenden Zielsystemen getestet:
Ardunino Duemilanove: amforth 4.9 und 5.1
TI MSP430 Launchpad: mecrisp 1.0, 4e4th 0.34.
Fragen, Fehlerhinweise und Verbesserungsvorschläge, auch Vorschläge für weitere Zielsysteme bitte an folgende E-Mailadresse senden:
manfred.mahlow@forth-ev.de .
Vielen Dank an Andreas Knochenhauer, dass er MINFORTH unter der GNU General Public License veröffentlicht hat. MINFORTH ist ein sehr robustes leicht zu verstehendes Forth-System, dass sich als ausgezeichnete Basis für meine eigene Forth-Entwicklungsumgebung (MINFORTH Plus) erwiesen hat.
Letzte Revision: MM-131201