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: Do, 17.08.2006 15:09:59
hallo,
nachdem mein hilferuf hier im entwickler-newsletter unbeantwortet blieb,
habe ich selbst nochmal versucht herauszubekommen, warum die delay-fkt
nicht verzögert.
das ergebnis ist dieser patch, der vielleicht nicht ganz den richtlinien
entspricht. aber jetzt geht die funktion.
aus zwei gründen ging die delay-fkt nicht.
1) die warte-schleife musste auf grund der bedingungen immer sofort
abbrechen!
2) die timer-isr wird zu spät initialisiert.
da 1) immer für eine rückkehr von der delay fkt sorgte ist dieser fehler
auch nicht aufgefallen (zumal die verzögerungen sehr gering sind). als
ich jedoch die bedingungen der warteschleife korregiert habe, hing der
bot. weil nun auf ein weiterlaufen der sekunden und millisekunden
gewartet wurde, diese änderten sich aber nicht, da die timer-variablen
nicht aktualisiert wurden, da die isr dafür noch nicht aktiv war. sprich
alle delay aufrufe bis zum aufruf von bot_sens_isr() hatten keine
wirkung (wegen schleifenabbruch), beziehungsweise hingen nach der korrektur.
der patch ändert die warte-bedingung der delay-fkt und trägt
timer_2_init() in die init-fkt von ct-bot.c ein, ob das der ideale platz
ist weiss ich nicht, aber ich wüsste auch nicht welcher besser waere
(der eintrag in bot_sens_isr() wird vom dem patch aber nicht entfernt.
viel spass damit.
gruss
achim
Index: Changelog.txt
===================================================================
RCS file: /ctbot/ct-Bot/Changelog.txt,v
retrieving revision 1.93
diff -u -r1.93 Changelog.txt
--- Changelog.txt 15 Aug 2006 08:21:30 -0000 1.93
+++ Changelog.txt 17 Aug 2006 13:02:25 -0000
@@ -1,5 +1,7 @@
CHANGELOG fuer c't-Bot
======================
+2006-08-17 Achim Pankalla [achim.pankalla@xxxxxx]: Korregiert Fehler bei delay-Fkt.
+
2006-08-04 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: tcp.h um include fuer Macs ergaenzt
2006-08-04 Benjamin Benz [bbe@xxxxxxxx]: Alle TCP-Daten werden nun auf einen Schlag uebertragen
Index: ct-Bot.c
===================================================================
RCS file: /ctbot/ct-Bot/ct-Bot.c,v
retrieving revision 1.33
diff -u -r1.33 ct-Bot.c
--- ct-Bot.c 15 Aug 2006 08:21:30 -0000 1.33
+++ ct-Bot.c 17 Aug 2006 13:02:25 -0000
@@ -105,6 +105,11 @@
// Watchdog aus!
wdt_disable();
+ // Time ISR initialiseren vor ersten delay Aufruf
+ timer_2_init();
+
// Ist das ein Power on Reset ?
if ((MCUCSR & 1) ==1 ) {
MCUCSR &= ~1; // Bit loeschen
Index: mcu/delay.c
===================================================================
RCS file: /ctbot/ct-Bot/mcu/delay.c,v
retrieving revision 1.5
diff -u -r1.5 delay.c
--- mcu/delay.c 8 Jul 2006 02:36:15 -0000 1.5
+++ mcu/delay.c 17 Aug 2006 13:02:26 -0000
@@ -68,7 +68,9 @@
uint16 s_stop = s_start + ms_stop/1000;
ms_stop %= 1000;
- while ((s_stop != timer_get_s()) && (ms_stop != timer_get_ms())){asm volatile("nop");}
+ while ( s_stop > timer_get_s() ){asm volatile("nop");} /*Sekunden ablaufen lassen*/
+ while (ms_stop > timer_get_ms()){asm volatile("nop");} /*Millisek. ablaufen lassen*/
+// while ((s_stop != timer_get_s()) && (ms_stop != timer_get_ms())){asm volatile("nop");}
#else
uint16 ms_counter=0;