c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
Absender: Achim Pankalla
Datum: So, 01.06.2008 19:23:27
hallo,
anbei ein patch, der den fehler unter ticket 167 korregieren sollte. :-)
das problem war, das die fkt. command_init in command.c aufgerufen
wurde, bevor der eeprom-emulator initialisiert wurde. dadurch lieferten
die get-aufrufe in command_init immer 0.
ich habe mit diesen patch die reihenfolge in ct-bot.c so geändert, das
der eeprom-manager schon initialisiert ist, bevor ein set_ oder
get_bot_address() erfolgt.
in zuge dieser arbeiten, habe ich auch ein problem bei der auswertung
der aufrufoptionen von ct-bot.exe entdeckt (es kann zum doppelten aufruf
von init_eeprom_man() kommen und auch hier war ein set_bot_address()
aufruf vor dem eeprom_init möglich).
da ich mich in letzter zeit nicht viel um den bot kümmern konnte :'( .
bitte ich alle die sich mit der neuen kommunikationsfunktionen schon
ausgiebig beschäftigt haben, meinen patch auch noch zu testen. ich
konnte bei einigen kleinen tests keine fehlfkt. erkennen.
mit freundlichen grüssen
achim
Index: E:/eclipse/ct-bot orginal/ct-Bot/pc/cmd-tools_pc.c
===================================================================
--- E:/eclipse/ct-bot orginal/ct-Bot/pc/cmd-tools_pc.c (revision 1442)
+++ E:/eclipse/ct-bot orginal/ct-Bot/pc/cmd-tools_pc.c (working copy)
@@ -37,6 +37,9 @@
#include "tcp.h"
#include "command.h"
+uint8_t opt_baddress = 0;
+uint8_t opt_eeprom = 0;
+
/*!
* Zeigt Informationen zu den moeglichen Kommandozeilenargumenten an.
*/
@@ -109,12 +112,11 @@
case 'a': {
/* Bot-Adresse wurde uebergeben */
- int addr = atoi(optarg);
- if ((addr >= CMD_SIM_ADDR) && (addr != CMD_BROADCAST)) {
+ opt_baddress = atoi(optarg);
+ if ((opt_baddress >= CMD_SIM_ADDR) && (opt_baddress != CMD_BROADCAST)) {
printf("Unzulaessige Bot-Adresse!\n");
exit(1);
}
- set_bot_address(addr);
break;
}
@@ -224,11 +226,7 @@
case 'i': {
/* EEPROM-Init */
printf("EEPROM soll mit den Daten einer eep-Datei initialisiert werden.\n");
- if (init_eeprom_man(1) != 0) {
- printf("Fehler bei EEPROM-Initialisierung!\n");
- } else {
- printf("done.\n");
- }
+ opt_eeprom = 1;
exit(0);
}
Index: E:/eclipse/ct-bot orginal/ct-Bot/Changelog.txt
===================================================================
--- E:/eclipse/ct-bot orginal/ct-Bot/Changelog.txt (revision 1442)
+++ E:/eclipse/ct-bot orginal/ct-Bot/Changelog.txt (working copy)
@@ -1,5 +1,9 @@
CHANGELOG fuer c't-Bot
======================
+2008-06-01 Achim Pankalla [achim.pankalla@xxxxxx]: Ticket 167.
+ Fehler korregiert. Benutzung von EEPROM Variablen vor der Initialisierung des EEPROM-Emulators.
+ Im Zuge dieser Korrektur auch Probleme mit der Auswertung der Optionen -i und -a beseitigt.
+
2008-05-21 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: TCP-Testserver / -Client debuggt (#161), funktioniert nun (wieder)
2008-05-19 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: 3. Version fuer catch_pillar(), aehnlich zu Version 2, berechnet die Entfernung zum Objekt aber anders. Einstellbar mit #define CATCH_PILLAR_VERSION in behaviour_catch_pillar.c
Index: E:/eclipse/ct-bot orginal/ct-Bot/ct-Bot.c
===================================================================
--- E:/eclipse/ct-bot orginal/ct-Bot/ct-Bot.c (revision 1442)
+++ E:/eclipse/ct-bot orginal/ct-Bot/ct-Bot.c (working copy)
@@ -76,6 +76,10 @@
#include "map.h"
#include "cmd_tools.h"
+#ifdef PC
+ extern uint8_t opt_baddress, opt_eeprom;
+#endif
+
/*!
* Der Mikrocontroller und der PC-Simulator brauchen ein paar Einstellungen,
* bevor wir loslegen koennen.
@@ -125,11 +129,6 @@
#ifdef BOT_2_PC_AVAILABLE
bot_2_pc_init();
#endif
- #ifdef PC
- if (init_eeprom_man(0) != 0) {
- LOG_ERROR("EEPROM-Manager nicht korrekt initialisiert!");
- }
- #endif
#ifdef DISPLAY_AVAILABLE
display_init();
#endif
@@ -185,12 +184,20 @@
#ifdef DEBUG_TIMES
struct timeval start, stop;
#endif
+
/* Kommandozeilen-Argumente auswerten */
hand_cmd_args(argc, argv);
+
+ /* EEPROM Emulator initialisieren */
+ if (init_eeprom_man(opt_eeprom) != 0) {
+ LOG_ERROR("EEPROM-Manager nicht korrekt initialisiert!");
+ }
printf("c't-Bot\n");
/* Bot-2-Sim-Kommunikation initialisieren */
+ if(opt_baddress > 0)
+ set_bot_address(opt_baddress);
bot_2_sim_init();
#endif // PC