De nombreux exemples de programmes pour le MSP430 ont leur première ligne comme:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Pourquoi font-ils cela?
De nombreux exemples de programmes pour le MSP430 ont leur première ligne comme:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Pourquoi font-ils cela?
Réponses:
Le chronomètre de surveillance (WDT) est activé par défaut, c'est une chose utile à avoir dans des applications plus complexes, mais déclenche beaucoup de nouvelles personnes. Souvent, ils ne desservent pas le WDT dans leur code ou n'incluent pas de routine de service d'interruption (ISR) pour gérer l'événement WDT. Ainsi, lorsque leur puce continue de se réinitialiser, ils deviennent très frustrés. En outre, les exemples de programmes n'essaient généralement pas de montrer le WDT, il est donc désactivé.
Edit: La minuterie du chien de garde aurait pu être nommée "interrupteur de l'homme mort". Son comportement par défaut consiste à réinitialiser le microcontrôleur, sauf si le micrologiciel lui fait périodiquement savoir que tout fonctionne correctement. C'est ce qu'on appelle «nourrir le chien» ou «donner un coup de pied au chien». De cette façon, si votre micrologiciel est bloqué dans une boucle ou cesse de fonctionner comme prévu, le chien de garde n'est pas alimenté et réinitialise la puce (espérons-le dans un nouvel état de fonctionnement).
Vous pouvez également utiliser le WDT comme interruption périodique pour effectuer d'autres tâches, tout ce que vous pouvez imaginer. Il vous suffit d'écrire l'ISR correspondant.
En plus de l'argument de Samuel sur les personnes qui déclenchent accidentellement le WDT, il y a une autre raison importante pour laquelle il devrait être désactivé initialement.
Même si votre application est normalement capable de réinitialiser correctement le minuteur, elle peut ne pas être en mesure de le faire pendant le code d'initialisation, pour deux raisons:
Par conséquent, il est recommandé de désactiver le WDT comme première chose que vous faites, même si vous ne l'avez jamais activé .
Si vous souhaitez l'utiliser, vous pouvez le réactiver immédiatement avant d'activer les interruptions, comme dernière étape de votre code d'initialisation.
int _system_pre_init(void)
fonction, qui s'exécute avantmain