Wiele przykładowych programów dla MSP430 ma swoją pierwszą linię jako:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Dlaczego to robią?
Wiele przykładowych programów dla MSP430 ma swoją pierwszą linię jako:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Dlaczego to robią?
Odpowiedzi:
Timer watchdog (WDT) jest domyślnie włączony, warto mieć go w bardziej złożonych aplikacjach, ale wprawia w ruch wiele nowych osób. Często nie będą obsługiwać WDT w swoim kodzie ani zawierać procedury obsługi przerwań (ISR) w celu obsługi zdarzenia WDT, więc kiedy ich chip resetuje się, stają się bardzo sfrustrowani. Ponadto przykładowe programy w większości nie próbują zademonstrować WDT, więc jest on wyłączony.
Edycja: Strażnik mógł zostać nazwany „przełącznikiem trupa”. Jego domyślne zachowanie polega na resetowaniu mikrokontrolera, chyba że oprogramowanie układowe okresowo informuje go, że wszystko działa poprawnie. Jest to znane jako „karmienie psa” lub „kopanie psa”. W ten sposób, jeśli twoje oprogramowanie utknie w pętli lub w inny sposób przestanie działać zgodnie z oczekiwaniami, watchdog nie zostanie zasilony i zresetuje chip (mam nadzieję, że do świeżego, działającego stanu).
Możesz także używać WDT jako okresowego przerywania w celu wykonywania innych zadań, cokolwiek sobie wyobrażasz. Musisz tylko napisać odpowiedni ISR.
Oprócz uwag Samuela na temat osób, które przypadkowo potknęły się o WDT, istnieje jeszcze jeden ważny powód, dla którego należy go początkowo wyłączyć.
Nawet jeśli aplikacja jest w stanie poprawnie zresetować timer, może nie być w stanie tego zrobić podczas kodu inicjalizacji z dwóch powodów:
W związku z tym dobrą praktyką jest wyłączanie WDT jako pierwszej rzeczy, nawet jeśli nigdy go nie włączałeś .
Jeśli chcesz go użyć, możesz go ponownie włączyć bezpośrednio przed włączeniem przerwań, co jest ostatnim krokiem kodu inicjującego.
int _system_pre_init(void)
funkcji, która wykonuje się przedmain