J'ai un chien de garde dans mon microcontrôleur qui, s'il n'est pas kické, va réinitialiser le processeur. Mes applications fonctionnent bien pendant un certain temps, mais vont finalement se réinitialiser parce que le chien de garde n'a pas été kické. Si je parcours le programme, ça fonctionne bien.Comment déboguer un timeout chien de garde
Quels sont les moyens de déboguer cela?
EDIT: Conclusion: La façon dont j'ai trouvé mon bogue était la chapelure du chien de garde. J'utilise un PIC qui a un vecteur ISR haut et bas. Le vecteur High était censé gérer la matrice LED et le vecteur Low devait gérer le tick du timer. Mais j'ai mis les deux gestionnaires ISR dans le vecteur haute. Ainsi, lorsque j'ai désactivé la matrice ISR de la matrice LED et que le service ISR du timer tick tick est nécessaire, le processeur serait bloqué dans le ISR bas pour gérer le tick timer, mais le gestionnaire de tick timer n'était pas là. Le fil d'Ariane a limité ma recherche à la fonction qui gérait la matrice LED et désactivait spécifiquement l'interruption de la matrice LED.
Juste à ajouter pour quiconque vient ici: Une "variable globale non initialisée" nécessitera une sémantique spéciale avec des compilateurs C. La norme dit que même les variables globales qui ne sont pas affectées d'une valeur doivent être initialisées à zéro. Donc, on aura typiquement besoin d'attributs pour ces variables comme par ex. ".noinit" pour avr-gcc. – FourtyTwo