Muitos programas de amostra para o MSP430 têm sua primeira linha como:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Porque é que eles fazem isto?
Muitos programas de amostra para o MSP430 têm sua primeira linha como:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Porque é que eles fazem isto?
Respostas:
O watchdog timer (WDT) está ativado por padrão, é algo útil em aplicativos mais complexos, mas atrai muitas pessoas novas. Eles geralmente não atendem ao WDT em seu código ou incluem uma rotina de serviço de interrupção (ISR) para lidar com o evento WDT; portanto, quando o chip continua sendo redefinido, eles ficam muito frustrados. Além disso, os programas de amostra não estão, na maioria das vezes, tentando demonstrar o WDT e, portanto, estão desativados.
Edit: O timer do cão de guarda poderia ter sido chamado de "interruptor do homem morto". Seu comportamento padrão é redefinir o microcontrolador, a menos que o firmware informe periodicamente que tudo está funcionando bem. Isso é conhecido como "alimentar o cachorro" ou "chutar o cachorro". Dessa forma, se o seu firmware ficar preso em um loop ou parar de funcionar conforme o esperado, o cão de guarda não será alimentado e redefinirá o chip (esperançosamente para um novo estado de funcionamento).
Você também pode usar o WDT como interrupção periódica para executar outras tarefas, o que você puder imaginar. Você apenas precisa escrever o ISR relevante.
Além do argumento de Samuel sobre pessoas que acidentalmente invadiram o WDT, há outra razão importante pela qual ele deve ser desativado inicialmente.
Mesmo que seu aplicativo normalmente seja capaz de redefinir o timer corretamente, talvez não seja possível fazer isso durante o código de inicialização, por dois motivos:
Como resultado, é uma boa prática desabilitar o WDT como a primeira coisa que você faz, mesmo que nunca o tenha ativado .
Se você quiser usá-lo, poderá reativá-lo imediatamente antes de ativar as interrupções, como a última etapa do seu código de inicialização.
int _system_pre_init(void)
função, que é executado antesmain