Als Watchdog (Wachhund) bezeichnet man die sogenannte "Watchdogtimer-Schaltung" (WDT) innerhalb eines Microcontrollers, die dafür sorgt, daß der Controller bei einem undefinierten Zustand ein RESET ausführt.
Mit dem Starten des Watchdog-Timers läuft ein von der Systemclock, oder seperat getakteter Hardware-Zähler ab einem programmierbaren Zählerstand los. Kommt es nach der gewählten Zeit zu einem Überlauf, so wird automatisch ein RESET-Signal für den Controller ausgelöst und somit die Hardware initialisiert und das im Controller abgelegte Programm neu gestartet.
Um zu verhindern, daß der Controller sich ständig neu startet, muß das Programm immer rechtzeitig den Watchdogtimer zurücksetzen. Dies kann an mehreren Stellen im üblichen Programmablauf geschehen. Falls also das Programm aus irgendwelchen Gründen nicht mehr planmäßig abläuft oder auch stehenbleibt (z.B. wegen Endlosschleife), wird in den meisten Fällen der Watchdogtimer nicht mehr zurückgesetzt. Dadurch wird durch den Reset zumindest der Controller wieder in einen definierten Zustand gebracht.
Ein Watchdogtimer findet man in den meisten Atmel AVR-Controllern sowie den PIC Controllern. Dort kann dieser auch per Software deaktiviert und aktiviert werden.
Damit der Watchdog wirkungsvoll bleibt sollte man das Zurücksetzen so selten wie möglich machen. In der Regel wird man das Programm erst ohne den Watchdog-Reset entwickeln und erst wenn alles fertig ist, die nötigen Resets einfügen. Der Watchdog sollte normalerweise nur als zusätzliche Sicherung eingeplant sein, also bei normaler Benutzung nie auftreten.
Beim AVR kann die Watchdog-hardware auch als Timer zusammen mit Stromsparmodi benutzt werden, um den Controller den größen Teil der Zeit im Powerdown modus zu halten.
Hier ein Beispiel zur Programmierung des Watchdogs bei AVRs:
'**************************************************** '* Watchdog - Test * '* * '* Es soll hier das Prinzip des Watchdogs gezeigt * '* werden. * '**************************************************** Config Watchdog = 2048 'Führe nach 2048 mSec. eine Reset durch Dim I As Word I = 1 While I > 0 ' Endlos-Schleife Start Watchdog ' Starte den Watchdog ' Es folgt der eigentliche Programmcode Print I Incr I 'Waitms 3000 ' Wird die Zeile "Waitms 3000" auskommentiert, soll 3000mSec gewartet werden. Der Watchdog führt aber ' vorher und zwar nach 2048 mSec..ein Reset durch. Stop Watchdog ' Stoppe den Watchdog ' Sollte es zu einem Absturz kommen, kann der Watchdog nicht gestoppt werden und es kommt nach ' 2024 mSec. zum Reset Wend End