Wie man den Wachhund richtig füttert
Die primäre Aufgabe eines Watchdogs bei einem Mikrocontroller ist es, Störungen im vorgegebenen Programmablauf festzustellen und den Mikrocontroller im Fehlerfall in einen definierten Zustand zu...
Anbieter zum Thema
Die primäre Aufgabe eines Watchdogs bei einem Mikrocontroller ist es, Störungen im vorgegebenen Programmablauf festzustellen und den Mikrocontroller im Fehlerfall in einen definierten Zustand zu bringen - z.B. einen Reset auszulösen. Der Watchdog bei den Freescale-Mikrocontrollern wird oft auch als COP-Modul (COP = Computer Operating Properly) bezeichnet. Das COP-Modul kann als Timer oder als Zähler ausgeführt sein und wird entweder vom Systemtakt des Mikrocontrollers oder von einem eigenen RC-Oszillator getaktet. Wenn der COP-Timer bzw. -Zähler einen bestimmten, vorgegebenen Wert erreicht, wird ein Reset ausgelöst.Dieser vorgegebene Wert wird auch als Time-out-Zeit des Watchdogs bezeichnet. Die jeweiligen Time-out-Zeiten sind in den Datenblättern der entsprechenden Mikrocontroller zu finden und lassen sich in der Regel im Bereich von wenigen Millisekunden bis zu knapp einer Sekunde einstellen. Um zu verhindern, dass der Watchdog sein Time-out erreicht, muss er von der Anwendersoftware rechtzeitig zurückgestellt werden. Falls keine Rückstellung erfolgt (weil die Anwendersoftware beispielsweise in eine Endlos-Schleife gefangen ist), dann wird durch den Watchdog ein Reset ausgelöst.Die Methode des Rückstellens des Watchdogs hängt von dem konkreten Mikrocontroller ab und ist im jeweiligen Datenbuch nachzulesen. Üblicherweise erfolgt das Rücksetzen, indem ein bestimmter Wert in ein vorgegebenes Register geschrieben wird. Richtig eingesetzt, kann der Watchdog ein wirksames Instrument zur Erhöhung der Sicherheit bei Mikrocontroller-Anwendungen sein. Um eine optimale Funktion des Watchdogs zu erreichen, sollten allerdings folgenden Hinweise beachtet werden: -Idealerweise sollte der Watchdog mit einem einzigen Befehl oder einem kompakten Codesegment zurückgesetzt werden. In manchen Fällen lässt es sich nicht vermeiden, mehrere Rücksetzbefehle zu verwenden. Diese sollte man dann aber so sparsam wie möglich einsetzen.-Der Rücksetzbefehl oder das entsprechende Codesegment sollte sich möglichst in der Hauptschleife des Programms befinden. Damit wird der Watchdog mit jedem Durchlauf der Hauptschleife zurückgesetzt und man kann relativ sicher sein, dass das Anwendungsprogramm korrekt ausgeführt wird.-Der Rücksetzbefehl oder das entsprechende Codesegment sollte sich möglichst nicht in einer Timer- oder Interrupt-Routine befinden. Wie der Name sagt, unterbricht eine Interrupt-Routine das Hauptprogramm, egal ob dieses korrekt ausgeführt wird oder nicht. Wenn der Rücksetzbefehl in einer Interrupt-Routine steht, kann somit die korrekte Ausführung des Hauptprogramms nicht überwacht werden.-Falls es sich doch nicht vermeiden lässt, den Rücksetzbefehl in einer Interrupt-Routine zu platzieren, dann kann man innerhalb des Hauptprogramms einen definierten Eintrag an eine festgelegte Adresse im RAM vornehmen. In der Interrupt-Routine wird dann direkt vor dem Rücksetzen des Watchdogs getestet, ob sich der erwartete Wert an der festgelegten Stelle befindet. Damit kann der korrekte Ablauf des Hauptprogramms weitestgehend sichergestellt werden.
(ID:142612)