Un bug particulièrement irritant dans un système contrôlé par microprocesseur consiste à réinitialiser le microprocesseur de manière inattendue. Un outil important pour déboguer ce type de problème est une liste de causes possibles. Qu'est-ce qui pourrait provoquer la réinitialisation inattendue d'un microcontrôleur?
microcontroller
microprocessor
reset
debugging
Stephen Collings
la source
la source
Réponses:
Sur les puces PIC et dsPIC, j'ai observé les causes suivantes de réinitialisation inattendue.
Matériel:
Logiciel:
Sur certains dsPIC, le registre RCON stocke des bits indiquant la cause de la réinitialisation. Cela peut être très utile lors du débogage.
la source
La broche RESET doit être correctement entraînée par un circuit de réinitialisation surveillant la sur / sous tension et créant un signal de réinitialisation suffisamment long. Dans cet esprit, mon expérience avec une réinitialisation matérielle incontrôlée vient alors de:
la source
Une possibilité supplémentaire que je n'ai pas vue dans cette liste est un périphérique qui prend en charge ICSP. Si des tractions insuffisantes sont utilisées sur les lignes qui se déclenchent en mode de programmation série du circuit, il est parfois possible d'entrer dans ce mode de manière aléatoire. Cela conduit à une réinitialisation un court intervalle plus tard lorsqu'aucune mise à jour du programme n'est envoyée aux lignes de récepteur série désignées. Je soupçonne qu'un temporisateur de surveillance interne est réinitialisé si ICSP est démarré et qu'aucune donnée de programmation n'est envoyée. C'est une erreur que j'ai commise et j'ai passé beaucoup de temps à trouver un 16F876.
la source
Assurez-vous que si vous utilisez des puces logiques CMOS ou TTL dans votre circuit, elles disposent de condensateurs de découplage adéquats entre Vdd et la masse (généralement 0,1 uF). J'utilisais un CD4021 dans une conception et lorsqu'il était en cours d'utilisation, il provoquait apparemment une pointe qui provoquait le redémarrage du microprocesseur. Ensuite, le cycle se répétait. C'est aussi pourquoi c'est une bonne idée de mettre une séquence de test évidente (comme faire clignoter une LED plusieurs fois) au début de votre code afin que vous sachiez que le microprocesseur fonctionne et exécute du code.
la source
C'est l'une de ces rares choses qui pourraient apparaître:
J'avais un projet qui impliquait un microcontrôleur et il se réinitialisait sporadiquement. En bref, il s'est avéré que certaines options devaient être activées ou désactivées, sinon des réinitialisations pourraient se produire. Je n'ai découvert cela qu'en lisant les errata après avoir abandonné tout le reste.
Maintenant, je prends l'habitude de lire les errata avant même de décider d'utiliser une puce pour savoir dans quoi je me mets et si c'est quelque chose que je peux gérer. Malheureusement, après l'obtention du diplôme, je n'avais vraiment personne pour m'informer sur les pratiques courantes, alors une grande partie de mon apprentissage dans le monde réel s'est faite par échec et par frustration.
la source