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]

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

Absender: Achim Pankalla
Datum: Mo, 21.08.2006 21:52:57
In-reply-to: <001601c6c2bf$ac1f1ca0$1401a8c0@user08>
References: <001601c6c2bf$ac1f1ca0$1401a8c0@user08>


hallo timo,
klar hast du recht, das die fkt. wirklich eine verzögerung erzeugte und zwar dann wenn durch den übergabewert ein überlauf in die nächste sekunde erzeugt wurde. ausserdem waren die werte die im bisherigen quellkode benutzt wurden nur sehr klein, so dass dies vielleicht auch nicht viel ausmachte. mir war es nur bei meiner kalibrierungsfunktion aufgefallen. aber dein vorschlag für die warteschleife macht mir etwas bauchschmerzen in einen solchen system wie den bot. du wartest da auf einen exakten zeitwert. der prozessor hat zwar eine zykluszeit von 179us, wenn ich mich nicht täusche und das müsste zwar für die nops bei weiten reichen, aber man darf die isr-routinen nicht vergessen, die ja aktiviert bleiben. diese werden doch für die timer und das aktualisieren der sensor-werte (variablen) benutzt. sollte dadurch der exakte zweitwert von den timern nicht bestimmt werden und die millisekunde übersprungen werden, so wird delay-fkt nie enden oder habe ich ein denkfehler zu späten stunde?? deshalb habe ich auch diese zweistufige schleife gewählt.

gruss
   achim

Timo Sandmann schrieb:
Hallo,

aus zwei gründen ging die delay-fkt nicht.
1) die warte-schleife musste auf grund der bedingungen immer sofort abbrechen!

Naja das stimmt so nicht ganz, aber die Bedingung ist dort in der Tat falsch
(es wird fälschlicher Weise bereits abgebrochen, sobald der Sekunden- _oder_
Millisekundenanteil erreicht ist).
Ich würde die Bedingung einfach auf

while ((s_stop != timer_get_s()) || (ms_stop != timer_get_ms())){asm
volatile("nop");}

ändern (|| anstatt &&).

2) die timer-isr wird zu spät initialisiert.

Das ist richtig, das Initialisieren muss natürlich vor der ersten Verwendung
von delay() passieren.

Viele Grüße,
Timo


_______________________________________________
ct-bot-entwickler Mailingliste
ct-bot-entwickler@xxxxxxxxxxxxxxxxx
http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler







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