¿Por qué los programas detienen el temporizador de vigilancia en el MSP430?

11

Muchos programas de ejemplo para el MSP430 tienen su primera línea como:

WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

¿Por qué hacen esto?

    
pregunta necromancer

2 respuestas

15

El temporizador de vigilancia (WDT) está activado de forma predeterminada, es una cosa útil para tener en aplicaciones más complejas, pero atrae a mucha gente nueva. A menudo, no le dan servicio al WDT en su código ni incluyen una rutina de servicio de interrupción (ISR) para manejar el evento WDT, por lo que, cuando su chip se reinicia, se vuelven muy frustrados. Además, los programas de ejemplo, en su mayor parte, no intentan demostrar el WDT, por lo que está desactivado.

Editar: El temporizador de vigilancia podría haber sido llamado "interruptor del hombre muerto". Su comportamiento predeterminado es reiniciar el microcontrolador a menos que el firmware periódicamente le permita saber que todo funciona bien. Esto se conoce como "alimentar al perro" o "patear al perro". De esta manera, si su firmware se atasca en un bucle o si no deja de funcionar como se espera, el watchdog no se alimenta y restablecerá el chip (con suerte a un estado de funcionamiento nuevo).

También puede usar el WDT como interrupción periódica para realizar otras tareas, lo que pueda imaginar. Solo tienes que escribir el ISR relevante.

    
respondido por el Samuel
9

Además del punto de Samuel acerca de las personas que accidentalmente activaron el WDT, hay otra razón importante por la que debería estar desactivado inicialmente.

Incluso si su aplicación normalmente puede restablecer el temporizador correctamente, es posible que no pueda hacerlo durante el código de inicialización, por dos motivos:

  • La inicialización puede tardar más que una sola marca WDT, pero requiere que las interrupciones estén deshabilitadas. Esto significa que si confía en, por ejemplo, un ISR de temporizador para restablecer el temporizador, podría entrar en un bucle de arranque infinito.
  • No necesariamente conoce el estado del registro del temporizador en todas las MCU (es decir, la próxima marca podría ser mucho antes de lo esperado, ya que el registro podría no comenzar en 0).

Como resultado, es una buena práctica deshabilitar el WDT como lo primero que haces, incluso si nunca lo habilitaste .

Si desea usarlo, puede volver a habilitarlo inmediatamente antes de activar las interrupciones, como el último paso de su código de inicio.

    
respondido por el sapi

Lea otras preguntas en las etiquetas