hi, ich baue gerade einen watchdog in ein atmega c program. das ziel soll sein, das nach ausloesen des watchdog ein watchdog counter um eins erhoeht wird. ausserdem moechte ich gerne wissen, in welcher routine er abgesemmelt ist. also habe ich 2 variablen definiert. eine fuer den zaehler und eine weitere, die in jeder wichtigen funktion anders gesetzt wird. leider werden diese nach jedem ausloesen wieder auf 0 gesetzt. ich erkenne zwar beim programmstart den watchdog, kann aber keine variablen 'ueberleben' lassen. wo ist da der trick?
wahrscheinlich werden die Variablen entweder: - nach dem Neustart neuinitialisiert, oder: - nicht im RAM gepseichert (Optimierung) Um Auszuwerten WANN der Watchdog zu geschlagen hat müsstest du VOR der Initialisierung der Variablen "nachschauen" (stichwort .INIT sections in der libc-doku)
Guck dir die Doku zu den .noinit-Variablen mal an. Denk natürlich auch dran, dass du diese Variablen dann auch irgendwann mal selbst initialisiert haben musst... Vermutlich basierend darauf, dass du beim Auswerten des MCUCR/MCUCSR festgestellt hast, dass du von einem anderen als Watchdog-Reset ereilt worden bist. Die einzelnen Reset-Flags sind übrigens "sticky", d.h. die musst du selbst löschen, nachdem du sie gesehen und ausgewertet hast, andernfalls hast du nach dem ersten Watchdog-Reset nach einem Power-On-Reset sowohl PORF als auch WDRF gesetzt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.