Forum: Projekte & Code Basic-Interpreter für AVR auf Basis von Adam Dunkels uBasic


von Rene B. (themason) Benutzerseite


Angehängte Dateien:

Lesenswert?

Dieser Thread ist der Parallel-Thread zu

Beitrag "Basic-Interpreter auf einem AVR"

Es geht in diesem Thread ebenfalls um den Basic-Interpreter von Adam 
Dunkels, zu finden unter

http://www.sics.se/~adam/ubasic/

Diese Variante ist ebenfalls wie die von Uwe Berger für den AVR 
angepasst, hat aber noch einige interessante Features.

Der ganze Interpreter lässt sich in Sachen Features und 
Ressourcenverbrauch in der basic_cfg.h konfigurieren.

Funktionserweiterungen können über "TOKEN_WORD" in der Form eingebracht 
werden, indem man direkt mit dem Tokenizer arbeitet und quasi den Text 
selbstständig verarbeitet. Eine andere Möglichkeit ist es "einfach" 
C-Funktionen aufzurufen. Dafür müssen die Extensions eingeschaltet 
werden. Mit ihnen hat man die Möglichkeit, Funktionen anzugeben und eine 
Anzahl von Parametern (maximal die in MAX_USER_PARAMS angegebenen) zu 
definieren. Die Parameter können dabei vom Typ String oder Integer sein. 
Es wird dabei ein Datentyp namens "T_USER_FUNC_DATAS" definiert der der 
C-Funktion mit übergeben wird.
Weiterhin können mit den Extensions Zugriffe auf hinterlegte Variablen 
gemacht werden die vom Rest des Systems gesetzt oder abgefragt werden 
können. Außerdem ist der Lese/Schreib-Zugriff auf hinterlegte Arrays 
(nur Integer) implementiert.

Dieser ganzen Funktionalität ist noch eine weitere (über 
Compilerschalter aktivierbare) Schicht übergestülpt, mit der sich die 
Basic-Programme compilieren und das kompilat ausführen lassen.
Der Basic-Quell-Code wird dabei wie auch schon im Interpreter-betrieb in 
Tokens übersetzt. Nur das die Tokens in einen Buffer weggeschrieben 
werden, und beim Ausführen aus eben diesem Buffer (oder einem anderen) 
ausgelesen werden. Der eigentliche Compiler ist als 2 Pass Compiler 
ausgelegt, damit Sprünge innerhalb des Basic-Programms direkt umgesetzt 
werden können, und nicht erst nach der Zeilennummer gesucht werden muß 
(wie bei dem Originalen Interpreter).

Um den Features versus Ressourcenverbrauch gerecht zu werden lassen sich 
viele Parameter einstellen die direkt den Verbrauch (vor allem im sehr 
knappen SRAM) einstellen lassen. Das reicht von der max. String-Länge 
der Benutzer-Parameter bei Aufruf einer C-Funktion, bis hin zur 
Stack-Tiefe für Gosubs und For/Next Schleifen.

Die aktuelle Version ist noch nicht vollständig getestet, und kann daher 
noch buggy sein. Für Hinweise, Kritik, Anregung bin ich jederzeit offen 
und hoffe auf rege Beteiligung an diesem Thread.

Die nächsten geplanten Features sind :
 - Auslesen des Basic-Quelltextes/Kompilats aus einem beliebigen 
Speichertyp (SD-Karte/EEProm/ext. SRAM/etc) mittels eines 
"Speichertreibers" (ist eher eine Speicherzugriffsfunktion)
 - Erweitern des Basic-Grund-Befehlssatzes um while/wend repeat/until
 - Erweitern des Basic-Befehlssatzes um AVR-spezifische Funktionen ohne 
die ressourcenträchtigen User-Extensions nutzen zu müssen
 - evtl. Einführung des weiteren Runmodes "Interpret" bzw 
"CommandProcessor" zum direkten eingeben von Basic-Befehlen als eine Art 
Shell

: Gesperrt durch Admin
von Rene B. (themason) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier mal mein neuestes Werk (andere würden Verbrechen dazu sagen ...)

Der uBasic-Interpreter umfasst nun :

 - C-Erweiterungen
 - Compilerunterstützung
 - Zeichengeräte-Anbindung

Ich habe noch ein wenig an dem Code rumprogrammiert, aber noch nicht 
alles Testen können. (Vor allem nicht alles mit jeder Kombination).
Was gegenüber dem Demo von Uwe Berger fehlt ist der Editor mit dem man 
Basic-Programme selbst erstellen kann.

Durch die noch ausstehenden Tests, der fehlende Editor, und eine noch 
nicht 100% vollständige Doku (des Quellcodes sowie des PDFs) steht diese 
Version erstmal auf alpha (also noch nicht alles 100% lauffähig !!)
Für Kritik, Lob und Verbesserungsvorschläge bin ich jederzeit offen.

Was die Befehlseingabe angeht so habe ich meine uParse verwendet. 
Dadurch benötigt das Demo insgesamt mehr Code. Es ist auf einem Mega16 
lauffähig, aber entwickelt und getestet wurde es auf einem Mega32. 
Demenstprechend ist das Demo auf einem Mega32 portiert.

Viel Spaß damit

von Rene B. (themason) Benutzerseite


Lesenswert?

Dieser Ableger ist nun ebenfalls im SVN unter

http://www.mikrocontroller.net/svnbrowser/avr-basic/

zu finden. Weiterhin gibt es eine Beschreibung im Artikel unter

http://www.mikrocontroller.net/articles/AVR_BASIC

Aufgrund der Resonanz und der Tatsache das sich das ganze schon ein 
wenig zu einem Gemeinschaftsprojekt entwickelt würde ich vorschlagen 
diesen Thread zu schließen und die ganze Diskussion unter

Beitrag "Basic-Interpreter auf einem AVR"

fortzuführen, zumal die Erkenntnisse denke ich eher dort zusammenfließen 
als hier.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.