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