Viele Beispielprogramme für den MSP430 haben ihre erste Zeile wie folgt:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Warum machen sie das?
Der Watchdog-Timer (WDT) ist standardmäßig aktiviert. Dies ist in komplexeren Anwendungen nützlich, löst jedoch viele neue Leute aus. Sie warten den WDT häufig nicht in ihrem Code oder enthalten keine Interrupt-Serviceroutine (ISR), um das WDT-Ereignis zu behandeln. Wenn ihr Chip also immer wieder zurückgesetzt wird, werden sie sehr frustriert. Darüber hinaus versuchen die Beispielprogramme größtenteils nicht, das WDT zu demonstrieren, sodass es deaktiviert ist.
Bearbeiten: Der Watchdog-Timer könnte als "Totmannschalter" bezeichnet worden sein. Das Standardverhalten besteht darin, den Mikrocontroller zurückzusetzen, es sei denn, die Firmware teilt ihm regelmäßig mit, dass alles ordnungsgemäß funktioniert. Dies ist als "Füttern des Hundes" oder "Treten des Hundes" bekannt. Auf diese Weise wird der Watchdog nicht gespeist und setzt den Chip zurück (hoffentlich in einen neuen Betriebszustand), wenn Ihre Firmware in einer Schleife stecken bleibt oder auf andere Weise wie erwartet nicht mehr funktioniert.
Sie können den WDT auch als periodischen Interrupt verwenden, um andere Aufgaben auszuführen, was immer Sie sich vorstellen können. Sie müssen nur den entsprechenden ISR schreiben.
Zusätzlich zu Samuels Hinweis auf Personen, die versehentlich das WDT auslösen, gibt es einen weiteren wichtigen Grund, warum es zunächst deaktiviert werden sollte.
Selbst wenn Ihre Anwendung normalerweise in der Lage ist, den Timer korrekt zurückzusetzen, ist dies aus zwei Gründen möglicherweise während des Initialisierungscodes nicht möglich:
Daher empfiehlt es sich, das WDT als erstes zu deaktivieren, auch wenn Sie es nie aktiviert haben .
Wenn Sie es verwenden möchten, können Sie es unmittelbar vor dem Einschalten von Interrupts als letzten Schritt Ihres Initilierungscodes wieder aktivieren.
quelle
int _system_pre_init(void)
Funktion deaktivieren können, die vormain