SteffenJ
29.11.2006, 14:32
Hallo zusammen,
ich möchte mein Programm mit einem Watchdog überwachen. Also habe ich diesen über
#pragma config WDT = ON
#pragma config WDTPS = 128
eingeschalten und den Postscaler auf 1:128 gesetzt. Das bedeutet doch, dass der WD nun 18ms*128 = 2,304s ausgelöst wird.
Soweit so gut. Zu Beginn des Programms leuchtet während einer Init-Routine eine rote LED auf. Während der Init ist eine 10s Warteschleife, also muss die LED am Start mindestens 10s leuchten. In der Schleife lösche ich mit
_asm CLRWDT _endasm
immer mal wieder den WD. Die LED leuchtet auch nie auf, also gehe ich davon aus, dass kein Reset ausgelöst wurde.
Jetzt das Problem:
Wenn ich den WD wie oben beschrieben implementiere, dann liefern mir die Rechroutinen falsche Ergebnisse. Ohne funktioniert's, mit nicht. Jetzt ist meine Vermutung, dass der WD-Reset doch irgendwo ausgelöst wird und der PIC dort weitermacht, wo er aufgehört hat und zwischenzeitlich irgendwas am Stack geändert hat. Oder aber umgekehrt: er startet von vorn und im Stack stehen noch alte Variablen. Aber das kann ja auch nicht sein, da ich die Variablen immer mit nem Wert initialisiere...
Also kurz: Ich habe keine Ahnung, wieso der mit aktivierten WD auf einmal falsch rechnet... Weiss jemand Rat bei diesem Problem?
Grüsse
SteffenJ
ich möchte mein Programm mit einem Watchdog überwachen. Also habe ich diesen über
#pragma config WDT = ON
#pragma config WDTPS = 128
eingeschalten und den Postscaler auf 1:128 gesetzt. Das bedeutet doch, dass der WD nun 18ms*128 = 2,304s ausgelöst wird.
Soweit so gut. Zu Beginn des Programms leuchtet während einer Init-Routine eine rote LED auf. Während der Init ist eine 10s Warteschleife, also muss die LED am Start mindestens 10s leuchten. In der Schleife lösche ich mit
_asm CLRWDT _endasm
immer mal wieder den WD. Die LED leuchtet auch nie auf, also gehe ich davon aus, dass kein Reset ausgelöst wurde.
Jetzt das Problem:
Wenn ich den WD wie oben beschrieben implementiere, dann liefern mir die Rechroutinen falsche Ergebnisse. Ohne funktioniert's, mit nicht. Jetzt ist meine Vermutung, dass der WD-Reset doch irgendwo ausgelöst wird und der PIC dort weitermacht, wo er aufgehört hat und zwischenzeitlich irgendwas am Stack geändert hat. Oder aber umgekehrt: er startet von vorn und im Stack stehen noch alte Variablen. Aber das kann ja auch nicht sein, da ich die Variablen immer mit nem Wert initialisiere...
Also kurz: Ich habe keine Ahnung, wieso der mit aktivierten WD auf einmal falsch rechnet... Weiss jemand Rat bei diesem Problem?
Grüsse
SteffenJ