Dafür gibt es eine Lösung:
Man triggert den Watchdog innerhalb des Timerinterrupts.
Das ist z.B. immer bei größeren Programmen nötig, wenn mehrere Prozesse
mit unterschiedlichen Timeout-Zeiten überwacht werden müsen.
Jeder Prozess erhält dabei seinen eigenen Timeout-Zähler, der dann bei
ordnungsgemäßer Ausführung von dem Prozess selbst immer auf den
Startwert gesetzt wird.
Der Timerinterrupt zählt nun jeden dieser Zähler runter und wenn auch
nur einer den Wert 0 erreicht, bleibt er einfach in einer Endlosschleife
hängen, bis dann der Hardware-Watchdog zuschlägt.
Damit ist es z.B. auch möglich, wenn ein wichtiger Prozess nur einmal je
24h aktiv werden muß auch dann nur für diesen einen 24h-Timeout
aufzusetzten.
Dadurch, daß alle anderen Interrupts gesperrt sind, kann auch keiner
diese Endlosschleife unterbrechen.
Bei hohen Anforderungen an die Sicherheit, kann ja der Timerinterrupt
auch noch den Stackpointer auslesen und wenn dieser z.B. zu weit in den
Datenbereich reingelaufen ist, dann auch die Endlosschleife ausführen.
Peter