Ich habe einen Watchdog in meinem Mikrocontroller, der, wenn er nicht gekickt wird, den Prozessor zurücksetzt. Meine Anwendungen laufen für eine Weile gut, werden aber irgendwann zurückgesetzt, weil der Watchdog nicht gekickt wurde. Wenn ich durch das Programm gehe, funktioniert es gut.Debugging eines Watchdog-Timeouts
Was sind einige Möglichkeiten, dies zu debuggen?
EDIT: Fazit: Die Art, wie ich meinen Fehler fand, war die Watchdog Paniermehl.
Ich verwende eine PIC, die einen hohen und niedrigen ISR-Vektor hat. Der High-Vektor sollte mit der LED-Matrix umgehen und der Low-Vektor sollte mit dem Timer-Tick umgehen. Aber ich habe beide ISR-Handler in den hohen Vektor gesetzt. Wenn ich also die LED-Matrix-ISR deaktivierte und der Zeitzähler-ISR einen Dienst benötigte, würde der Prozessor in dem niedrigen ISR stecken bleiben, um den Zeitgeber-Tick zu handhaben, aber der Zeitgeber-Handler war nicht da.
Die Brotkrumen begrenzten meine Suche auf die Funktion, die die LED-Matrix behandelt und speziell die LED-Matrix-Unterbrechung deaktiviert.
Nur für jeden, der hierher kommt, hinzufügen: Eine "nicht initialisierte globale Variable" wird einige spezielle Semantik mit C-Compilern benötigen. Der Standard besagt, dass auch globale Variablen, denen kein Wert zugewiesen ist, auf Null initialisiert werden müssen. Daher benötigt man typischerweise Attribute für diese Variablen, wie z.B. ".noinit" für avr-gcc. – FourtyTwo