c't

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: Fr, 10.09.2010 21:12:59
In-reply-to: <9DD5454FB74E49BABC1EAF57CD9B8505@FrankPC>
References: <096FD558C4D20046A1BABE72DFF0C6C33B3ED5A41C@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx><CE1FB7FF-4A39-47CE-80F6-316DD3A2D068@xxxxxxxxxxxxxxx><20100826195514.307630@xxxxxxx> <9FC1FC43-9D8F-4DF1-A899-DD2305A89771@xxxxxxxxxxxxxxx> <9DD5454FB74E49BABC1EAF57CD9B8505@FrankPC>


Hallo Frank,

sehr gut, erstmal ein paar grundsätzliche Anmerkungen (sind nur Kleinigkeiten, aber machen das Leben leichter):
- Bitte die Datei .cproject nicht mit in den Patch einschließen, dann wird der auch nicht so groß.
- Patch nicht als Workspace-Patch, sondern als Projekt-Patch (kann man in Eclipse auswählen).
- Die Datei "tokenizer.c" bitte in "ubasic_tokenizer.c" und "include/tokenizer.h" in "include/ubasic_tokenizer.h" umbenennen, dann haben wir ein einheitliches Namensschema für alle Teile des Basic-Interpreters.
- Beim Kopieren von Dateien bitte die Header-Informationen anpassen. In behaviour_ubasic.h findet sich z.B. noch
	/*!
	 * @file 	behaviour_delay.h
	 * @brief 	Delay-Routinen als Verhalten
	 * @author 	Benjamin Benz (bbe@xxxxxxxx)
	 * @date 	12.07.07
	 */
- In einige Dateien fehlt solch ein Header komplett, bitte ergänzen. 
- Ein Pfad wie "C:\" existiert nur unter Windows, ich denke ein Unterverzeichnis im Bot-Projekt wäre angebrachter, dann kann der Code einfach eine relative Pfadangabe verwenden. Am besten ist die per #define an übersichtlicher Stelle einstellbar. 
- Über den Quellcode einmal die Auto-Formatierung von Eclipse laufen lassen (Source -> Format), dann passt die Textformatierung größtenteils zum vorhandenen Quellcode. 

Ich habe das Ganze jetzt gerade mal im Sim ausprobiert bzw. ausprobieren wollen, allerdings beendet sich der Bot-Code, sobald ich auf Taste 1 drücke:

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libSystem.B.dylib             	0x00007fff876ee3d6 __kill + 10
1   libSystem.B.dylib             	0x00007fff8778e913 __abort + 103
2   libSystem.B.dylib             	0x00007fff87783157 mach_msg_receive + 0
3   libSystem.B.dylib             	0x00007fff876e2abf __strcat_chk + 40
4   ct-Bot                        	0x000000010000c7b6 read_ubasic_src + 102 (behaviour_ubasic.c:127)
5   ct-Bot                        	0x000000010000cce8 ubasic_disp_key_handler + 179 (behaviour_ubasic.c:305)
6   ct-Bot                        	0x000000010000ce98 drive_ubasic_display + 105 (behaviour_ubasic.c:367)
7   ct-Bot                        	0x0000000100006821 gui_display + 118 (gui.c:225)
8   ct-Bot                        	0x0000000100001ab6 main + 206 (ct-Bot.c:121)
9   ct-Bot                        	0x0000000100000f9c start + 52

Thread 1:
0   libSystem.B.dylib             	0x00007fff876a1f02 read$NOCANCEL + 10
1   libSystem.B.dylib             	0x00007fff876f140f __sread + 16
2   libSystem.B.dylib             	0x00007fff876e914c _sread + 19
3   libSystem.B.dylib             	0x00007fff876e8fe2 __srefill + 41
4   libSystem.B.dylib             	0x00007fff876ff1a6 fgets + 105
5   ct-Bot                        	0x0000000100007963 read_command_thread + 77 (cmd-tools_pc.c:281)
6   libSystem.B.dylib             	0x00007fff876d9456 _pthread_start + 331
7   libSystem.B.dylib             	0x00007fff876d9309 thread_start + 13

Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000000  rbx: 0x00007fff5fbff6b0  rcx: 0x00007fff5fbff6a8  rdx: 0x0000000000000000
  rdi: 0x00000000000048ec  rsi: 0x0000000000000006  rbp: 0x00007fff5fbff6d0  rsp: 0x00007fff5fbff6a8
   r8: 0x0000000000000001   r9: 0x0000000100100e70  r10: 0x00007fff876ea412  r11: 0xffffff80002e1680
  r12: 0x0000000000000000  r13: 0x0000000000000000  r14: 0x0000000000000000  r15: 0x0000000000000000
  rip: 0x00007fff876ee3d6  rfl: 0x0000000000000202  cr2: 0x00000001000c7000


Das passiert übrigens auch, wenn ich den Pfad ändere (s.o.). Scheinbar läuft in read_ubasic_src() irgendwas mit der String-Behandlung falsch (Pufferüberlauf?), der Grund ist für mich auf die Schnelle aber nicht ersichtlich, ich habe jetzt nicht den ganzen Code durchgeschaut. 
Daher kann ich da im Moment leicht auch nicht mehr testen. 

Auf dem echten Bot habe ich es noch nicht getestet, dazu dann später mehr. 

Grüße,
Timo


Am 10.09.2010 um 14:22 schrieb Frank Menzel:
> Hallo Timo,
> anbei nun doch schon mal meine vorhandene Version des Basic Interpreters also Patch sowie 2 Beispielprogramme. Letztere müssen in das Dir c:\t kopiert werden, dann wird das entsprechende Prog über das Screendisplay nach Tastendruck geladen (also 1 für bas1.txt u.s.w.). Das erste Prog ist einfach das simple-Verhalten, der bot fährt also im Quadrat. Das 2. ist ein Wandfolger als Basicvariante. Alternativ kann das Prog auch direkt in den Speicher reincompiliert werden (für MCU-da gibt's keine Laderoutine), dazu einfach in der ubasic_behaviour die Kommentare entsprechend entfernen.
> Probiert habe ich das ganze bisher nur im sim, wo es ganz gut läuft.
> Die angesprochenen Änderungen des Basic-Interpreters selbst lassen noch auf sich warten, daher dies schon mal vorab zum rumspielen, probieren und staunen:-)
> 
> Gruß, Frank