## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### Re: [ct-bot] Basic-Interpreter für den Bot

Absender: Timo Sandmann
Datum: Mi, 30.06.2010 15:10:49
In-reply-to: <096FD558C4D20046A1BABE72DFF0C6C33B3ED5A41C@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <096FD558C4D20046A1BABE72DFF0C6C33B3ED5A41C@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>

    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Hallo Frank,

    das klingt sehr interessant und eine Script- / Interpretersprache für den Bot macht auf jeden Fall Sinn, u.a. weil man dann nicht andauernd den Controller neu flashen muss.
    Ich habe mir den uBasic-Interpreter jetzt nur kurz angeschaut, hatte aber vor einiger Zeit schon mal einen vom Prinzip her ähnlichen Interpreter implementiert (allerdings deutlich einfacher als Basic, die dazugehörige "Sprache" ist auch nicht Turing-vollständig). Daher kenne ich aber ein paar Probleme, die das Ganze mit sich bringt:

    Bei dem Original-Code von uBasic liegt das komplette Programm immer im RAM, wo man beim Atmega schnell an Grenzen stößt. Ich weiß jetzt nicht, ob du daran etwas geändert hast, aber ich denke, es wäre sinnvoll, das Programm auf der SD-Karte zu belassen und nur den gerade "aktiven" Teil ins RAM zu laden, weil Basic-Programme ja schnell recht groß werden.
    Laderoutinen für Dateien von der SD-Karte gibt es natürlich schon (MiniFAT), da gibt es derzeit nur zwei Probleme: Erstens dürfen die Dateien nicht fragmentiert sein, was aber sofort passiert, wenn man sie direkt in einem Editor erweitert. Zweitens kann der Bot selbst keine Dateien auf der SD-Karte anlegen, genau das wäre aber hier sinnvoll, so dass man z.B. vom Sim aus (ein Text-Eingabefenster gibt es dafür sogar schon im Sim) ein neues / geändertes Programm zum Bot schicken kann, der speichert es (für einfache Fälle im EEPROM oder wenn vorhanden auf der SD-Karte, alles andere macht wenig Sinn) und kann es dann natürlich auch sofort ausführen. Genau an diesem Punkt hatte ich damals die Geschichte mit dem Interpreter ruhen lassen und ein Mini-Dateisystem für die SD-Karte angefangen. Ich denke, das sollten wir langfristig auf jeden Fall mit deinem Basic-Interpreter verbinden, da musst Du das Rad nicht neu erfinden.

    Funktionsaufrufe (ich hatte mich da auf die Remote-Call-Liste beschränkt, so dass nur Verhaltensaufrufe möglich sind) und Variablenzugriffe (hatte ich gar nicht erst unterstützt) müssen immer über irgendwelche Tabellen laufen, die auch entsprechend gepflegt werden müssen. Diese Tabellen sollten auf jeden Fall im Flash liegen und nicht unnötig RAM fressen. Außerdem ist die Frage, welche Funktionen man überhaupt aufrufen können will, für alle Verhalten gibt es ja bereits eine entsprechende Tabelle von den Remote-Calls. Am besten verwenden wir auch für den Basic-Interpreter diese Tabelle, damit man nicht zwei Tabellen mit identischem Inhalt pflegen muss. Weiterhin ist die Parameterübergabe dort deutlich eleganter und universeller gelöst als bei uBasic. Falls wir auch Rückgabewerte auswerten können wollen, müssen hier evtl. noch ein paar Sachen erweitert werden. Hast Du bei diesen Dingen schon etwas dazu gebaut?

    Patches sind natürlich immer erwünscht!

    Viele Grüße,
    Timo

    Am 29.06.2010 um 08:10 schrieb Menzel, Frank IT-OS:
    >
    > Hallo,
    > ich bin auf eine Webseite gestoßen, auf der ein Basic-Interpreter für den AVR vorgestellt wird.
    > http://bralug.de/wiki/Basic-Interpreter_f%C3%BCr_AVR_%28uBasic-avr%29
    >
    > Nun habe ich mir gedacht: Warum diesen nicht auch für den bot benutzen, geht das überhaupt? Gedacht, getan und frisch ans Werk gemacht.
    >
    > Habe dazu ein Verhalten eingeführt, welches den uBasic-Interpreter (nach ein paar kleinen Anpassungen) dazu benutzt, schon vorhandene Verhalten unseres bots im Stile des guten alten Basics aufrufen zu können. Ja, richtig gehört: Der Interpreter kann bereits vorhandene C-Verhalten und Routinen aufrufen und ebenfalls auf bereits vorhandene Variablen, wie ja z.B. unsere Sensorvariablen, zugreifen.
    >
    >
    > So sieht z.B. das simple-Verhalten als Basicvariante so aus:
    >
    > 10 rem fahren voraus
    > 20 call("bot_dist", 0, 450, 14)
    > 30 rem drehen
    > 40 call("bot_turn", 90)
    > 50 goto 10
    > 60 end
    >
    > Es sind auch komplexere Programme möglich mit direkter Auswertung der Sensoren, so habe ich auch einen Wandfolger als Basic-Variante.
    >
    > Habe einen eigenen Screen gemacht, von dem aus man je nach Taste 1-9 das jeweilige Basic-Prog laden und ausführen lassen kann. Dies geht jedoch leider bisher nur für den PC, für den echten könnte man in Zukunft diese von der SD-Karte lesen. Leider existiert eine solche Dateiladeroutine noch nicht.
    >
    > Bei Interesse könnte ich kurzfristig einen Patch bereitstellen.
    > Details zum uBasic-Interpreter sind der Dock im o.a. Link zu entnehmen.
    >
    > Gruß, Frank
    -----BEGIN PGP SIGNATURE-----

    iEYEARECAAYFAkwrQlcACgkQDH/BX4067fJKAgCglGTvNQ+w5Q1jYsljm7OClfq5
    eG0AoMx//Ydzort6wXnChdAgG1Q674l0
    =dUnR
    -----END PGP SIGNATURE-----

- Antworten:
  - RE: [ct-bot] Basic-Interpreter für den Bot
    - From: Menzel, Frank IT-OS

- Referenzen:
  - [ct-bot] Basic-Interpreter für den Bot
    - From: Menzel, Frank IT-OS

- Voriger (Datum): [ct-bot] Basic-Interpreter für den Bot, Menzel, Frank IT-OS
- Nächster (Datum): RE: [ct-bot] Basic-Interpreter für den Bot, Menzel, Frank IT-OS
- Voriger (Thread): [ct-bot] Basic-Interpreter für den Bot, Menzel, Frank IT-OS
- Nächster (Thread): RE: [ct-bot] Basic-Interpreter für den Bot, Menzel, Frank IT-OS
- Indizes:
  - Datum
  - Thread