Ich habe mit einem Arduino Mega-Sketch das Problem, dass das Board nach etwa zwei-drei Wochen "einfriert."
Auf alle Fälle deutlich vor einem deutlichen millis() rollover.
Die Ursache konnte ich bisher nicht festmachen.
Daher habe ich mal einen Watchdog mit 8sec aktiviert. Dass das nicht wirklich eine Lösung ist, ist mir klar. Ad hoc habe ich aber keine bessere Variante gefunden.
Jetzt läuft das Board zwar grundsätzlich aber der Watchdog löst mehrmals Untertags einen Reset aus.
Blöd ist nur - ich sehe nicht weswegen. Jedenfalls scheint mein Problem größer zu sein, als ich bisher angenommen habe, denn welcher Codeabschnitt 8sec blockieren könnte, ist schwer zu finden.
Auf Detect Lockups | Articles | MegunoLink
hätte ich ein Projekt gefunden, um den Watchdog mitprotokollieren zu lassen.
Meine Frage wäre, ob jemand diese Implementierung kennt/Erfahrung damit hat
bzw
wie ihr von Watchdog-Resets auf die eigentliche Fehlerursache schließen würdet, denn "Protokolldrucker" am Serial-Port habe ich natürlich auch keinen ;-(
Solche Sorgen hatte ich auch schon mal....
War ein echt dummer Fehler, welcher dafür sorgte, dass eine Schleife manchmal ewig lief.
Aber schwer zu finden, da der Code plausibel aussah, und ich natürlich in der falschen Ecke gesucht habe.
Damals so gelöst:
Eine Variable in der .noinit Section angelegt
Dort jeweils beim Start, einer zu testenden Funktion, eine Markierung rein geschrieben.
Nach einem (WDT)Reset als erstes da rein geschaut und die Markierung seriell ausgegeben.
Die Alternative:
Du zeigst deinen Code!
n Hirne sehen mehr als nur 1
Es gibt ein Maschinen Statusregister, wo der Resetgrund hinterlegt wird.
Da kann man dann schön zwischen PowerOn, BOD, oder was auch immer für ein Reset, unterscheiden.
Aber leider wird das vom Bootloader überschrieben.(?!?!)
Um das auszulesen (und seriell auszugeben) müsste der Bootloader entfernt werden.
und dann in jeder Funktion am Anfang einen "Fingerprint" in einer .noinit hinterlassen?
Jau!
Nach einem Kaltstart(PowerOnReset), oder Upload, steht da Müll drin.
Aber nach jedem warmen Reset, dein rein geschriebener Wert.