THOR schrieb:
> Wenn man das richtig implementiert, ist ein Software WDT genauso gut wie
> einer in Hardware. Hardware kann auch Bugs haben.
Hard- und Softwarewatchdogs sind zwei verschiedene Dinge, die
verschiedene Fehler zu korrigieren versuchen. Nehmen wir an, zwei tasks
stehen im deadlock, aber die Nachtriggertask des HW watchdogs ist von
dem deadlock nicht betroffen - also wird der HW WD immer fröhlich
nachgetriggert, aber das System tut trotzdem nicht richtig. HW watchdogs
sind genau in den Szenarios sinnvoll, in dem das Nachtriggern durch eine
zu lang dauernde Berechnung höherer Priorität (also höhere Taskpriorität
oder Interrupt) unterdrückt wird. Systemweite semistabile Zustände
können von HW WDs nicht abegfangen werden.
SW Watchdogs (die ich eigentlich lieber "Monitore" nenne) prüfen, ob
eine zu überwachende task regelmäßig genug an die CPU kommt (was
natürlich voraussetzt, dass die task so gebaut ist, dass sie im
Normalbetrieb die Zeitvorgabe einhalten kann). Dazu zählt eine
"Monitortask" (sinnvollerweise auch die task, die den HW WD
nachtriggert) periodisch eine Variable herunter und setzt das System
zurück (mglw. durch Unterdrücken des HW WD Nachtriggerns oder wie auch
immer), wenn der Zähler 0 wird. Die zu überwachende Task setzt den
Zähler periodisch wieder hoch. Dadurch werden im obigen Beispiel die im
Deadlock stehenden tasks irgendwann die Monitor Task dazu bringen, den
Zähler auf 0 zu bringen und damit den SW WD auslösen. Ähnlicher Effekt
und verwandte Strategie, aber eben zwei unterschiedliche Mechanismen.
FWIW, ich diskutiere den Mechanismus recht ausführlich in Kapitel 8
meines Buches.