Muchos programas de ejemplo para el MSP430 tienen su primera línea como:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
¿Por qué lo hacen?
Muchos programas de ejemplo para el MSP430 tienen su primera línea como:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
¿Por qué lo hacen?
El temporizador de vigilancia (WDT) está activado por defecto, es una cosa útil para tener en aplicaciones más complejas, pero tropieza con un montón de gente nueva. A menudo no dan servicio al WDT en su código o incluyen una rutina de servicio de interrupción (ISR) para manejar el evento WDT, por lo que, cuando su chip sigue reiniciándose se sienten muy frustrados. Además, los programas de ejemplo, en su mayor parte, no tratan de demostrar el WDT por lo que está desactivado.
Edita: El temporizador de vigilancia podría haberse llamado "interruptor del hombre muerto". Su comportamiento por defecto es reiniciar el microcontrolador a menos que el firmware le haga saber periódicamente que todo va bien. Esto se conoce como "alimentar al perro" o "patear al perro". De esta manera, si tu firmware se queda atascado en un bucle o deja de funcionar como se esperaba, el watchdog no es alimentado y reiniciará el chip (con suerte a un estado fresco y funcional).
También puedes utilizar el WDT como interrupción periódica para realizar otras tareas, lo que se te ocurra. Sólo tienes que escribir el ISR correspondiente.
+1 gracias, aunque yo y otros lectores podemos buscarlo, estaría bien saber un razonamiento muy breve de por qué el WDT reinicia el chip. (no te preocupes por añadirlo sin embargo, su respuesta es lo suficientemente bueno para aceptar como es (después de esperar unas horas más para otras posibles respuestas))
Supongo que debería haber mencionado en la pregunta que soy un novato absoluto que también no tiene ni idea de lo que es el temporizador de vigilancia es :)
Además del punto de Samuel sobre la gente accidentalmente disparar el WDT, hay otra razón importante por la que debe ser desactivado inicialmente.
Incluso si tu aplicación es normalmente capaz de reiniciar el temporizador correctamente, puede que no sea capaz de hacerlo durante el código de inicialización, por dos razones:
Por lo tanto, lo primero que hay que hacer es desactivar el WDT, aunque nunca lo hayas activado .
Si quieres utilizarlo, puedes volver a activarlo inmediatamente antes de activar las interrupciones, como último paso de tu código de iniciación.
I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.