Muchos programas de muestra para el MSP430 tienen su primera línea como:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
¿Por qué hacen esto?
Muchos programas de muestra para el MSP430 tienen su primera línea como:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
¿Por qué hacen esto?
Respuestas:
El temporizador de vigilancia (WDT) está activado de forma predeterminada, es útil tenerlo en aplicaciones más complejas, pero hace tropezar a mucha gente nueva. A menudo no prestarán servicio al WDT en su código ni incluirán una rutina de servicio de interrupción (ISR) para manejar el evento WDT, por lo tanto, cuando su chip se reinicia se frustran mucho. Además, los programas de muestra, en su mayor parte, no intentan demostrar el WDT, por lo que está apagado.
Editar: El temporizador de vigilancia podría haber sido llamado "interruptor de hombre muerto". Su comportamiento predeterminado es restablecer el microcontrolador a menos que el firmware le informe periódicamente que todo funciona correctamente. Esto se conoce como "alimentar al perro" o "patear al perro". De esta manera, si su firmware se atasca en un bucle o deja de funcionar de la forma esperada, el watchdog no se alimenta y restablecerá el chip (con suerte a un nuevo estado de funcionamiento).
También puede usar el WDT como interrupción periódica para realizar otras tareas, lo que sea que pueda imaginar. Solo tiene que escribir el ISR relevante.
Además del punto de Samuel sobre las personas que accidentalmente tropezaron con el WDT, hay otra razón importante por la que debería deshabilitarse inicialmente.
Incluso si su aplicación normalmente es capaz de restablecer el temporizador correctamente, es posible que no pueda hacerlo durante el código de inicialización, por dos razones:
Como resultado, es una buena práctica deshabilitar el WDT como lo primero que hace, incluso si nunca lo habilitó .
Si desea usarlo, puede volver a habilitarlo inmediatamente antes de activar las interrupciones, como el último paso de su código de inicio.
int _system_pre_init(void)
función, que se ejecuta antesmain