heise online · c't · iX · Technology Review · Telepolis · mobil · Security · Netze · heise open · heise resale · Autos · c't-TV · Jobs · Kiosk
Zum Inhalt
c't

c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

[ct-bot]Patch für Fehler in delay-Funktion

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;
 	


Copyright © 2007 Heise Zeitschriften Verlag Kritik, Anregungen bitte an c't-WWW Datenschutzhinweis   Impressum