Absender: Timo Sandmann
Datum: Do, 12.05.2011 20:44:34
In-reply-to:
<1305219757.10999.44.camel@wbam-laptop>
References:
<1305219757.10999.44.camel@wbam-laptop>
Hi, Am 12.05.2011 um 19:02 schrieb Simon Siemens: > Hallo Timo, > > ich schlage in den folgenden drei Emails jeweils drei Patches vor (sogar > mit Changelog-Eintrag :-)). Alle drei hängen irgendwo zusammen, können > aber auch getrennt betrachtet werden. Die zwei Ersten sind die > Änderungen, die wir schon seit Langem verwenden. Wir dachten uns nun, > sie wären vielleicht auch von allgemeinem Interesse. > > Der Patch in dieser Email vereinfacht das Schreiben einer main-Funktion > auf das typische generische Grundgerüst > > int main(int argc, char * argv[]) { > ctbot_init(argc, argv); > > for (;;) { > pre_behaviour(); > > // Hier kommt der Verhaltenscode > > post_behaviour(); > } > } > > Dieses Grundgerüst passt zu Robotersoftware ebenso wie zu GUI-Software. > Es hat drei wesentliche Vorteile > > * Updates an der ct-Bot-Infrastruktur haben keine Auswirkungen auf > die main-Funktion. Wenn also jemand sein eigenes Verhalten mit > seiner eigene main-Funktion geschrieben hat (also komplett > eigene ct-Bot.c), dann funktioniert das mit Release 20 ebenso > wie mit Release 30 des ct-Bot-Codes – solange beide Releases die > drei Funktionen ctbot_init, pre_behaviour und post_behaviour > verwenden. Einfach ein neuer make-Aufruf und fertig. > * Es ist sehr einfach, selbst eine main-Funktion / ct-Bot.c zu > schreiben. Fehler können einem dabei kaum unterlaufen. > * Auch Anfänger verstehen diesen Aufbau und damit das Konzept > (nicht die Details) hinter dem ct-Bot-Code. > * Ein vierter Vorteil erschließt sich, wenn man meinen Vorschlag > einer Bibliothek der Hardware-Abstraktionsschicht denkt. (Wir > liefern eine solche Bibliothek an unsere Studenten aus.) > Bibliotheken enthalten üblicherweise keine main-Funktion, > sollten es dem Nutzer aber einfach machen, eine zu schreiben. > Das klappt mit diesem Patch ganz gut. > > Was hältst du davon? das ist sehr gut! :-) Aus einer ähnlichen Motivation heraus ist ja inzwischen auch das ganzen Init-Zeug aus ct-Bot.c in init.c usw. ausgelagert. Kann aber ein wenig dauern, bis ich mir den Patch (und die beiden weiteren) genauer anschaue - nicht weil es keine gute oder wichtige Sache ist, sondern aus Zeitmangel. > PS: Die main in ct-Bot.c ist übrigens etwas komplizierter, weil dort ja > bereits ein Verhalten (das Testprogramm) implementiert ist. Ja leider... Das sollte vielleicht auch mal überarbeitet werden. Grüße, Timo