Forum: Compiler & IDEs Atmega32 Watchdog. Variablen nach Reset


von Champus (Gast)


Lesenswert?

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?


von Jörg X. (Gast)


Lesenswert?

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)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.