Les points d'arrêt sont un excellent moyen de voir comment le compilateur s'exécute sur votre code. Maintenant, ma question est, est-il possible d'utiliser des points d'arrêt lorsque vous déboguez votre code?
Les points d'arrêt sont un excellent moyen de voir comment le compilateur s'exécute sur votre code. Maintenant, ma question est, est-il possible d'utiliser des points d'arrêt lorsque vous déboguez votre code?
Réponses:
Comme indiqué dans la réponse de Majenko, l'IDE Arduino ne fournit pas de mécanisme de point d'arrêt, mais Atmel Studio prend en charge les points d'arrêt . [*]
Cependant, si vous avez un interrupteur et une LED, vous pouvez suivre la progression de votre programme d'une manière qui offre certains des avantages des points d'arrêt. Vous ajouteriez un sous-programme, disons BPReport()
que via une sortie série ou un écran LCD signale les valeurs des variables critiques, puis allume la LED et attend que l'interrupteur ait été enfoncé et relâché, avec anti-rebond. Appelez votre BPReport()
routine où vous voulez un point d'arrêt inconditionnel. Pour les points d'arrêt conditionnels, vous pouvez avoir une routine BPReportIf(cond)
qui appelle BPReport()
si cond
est vrai. Si vous ne voulez pas sortir via série, vous pouvez utiliser plusieurs LED ou un LCD, et vous pouvez utiliser plusieurs commutateurs si vous voulez des contrôles de coupure externes (par exemple, cond
pourrait être un test de l'un des commutateurs supplémentaires).
[*] Certains débogueurs matériels modifient le code téléchargé chaque fois que des points d'arrêt sont ajoutés, modifiés ou supprimés. Cette utilisation épuisera la mémoire flash plus rapidement que le simple téléchargement occasionnel. Si une puce a été largement utilisée pour un tel débogage, n'utilisez pas cette puce dans un système de production.
Bien que Majenko sa réponse soit correcte, il existe d'autres options.
En ce qui concerne le vrai débogage matériel tel que déclaré par majenko, je dirais:
Une autre option de débogage d'une catégorie complètement différente consiste à organiser votre code afin que la logique de décision (indépendante du matériel) et l'action (dépendante du matériel) soient complètement séparées.
Compilez ensuite votre croquis en tant que programme local et déboguez la "logique de décision" sur votre machine locale. Cette méthode ne permet pas le "débogage matériel". Cette méthode permet également des tests unitaires.
Notez que votre machine locale est probablement un 32 ou 64 amers et la plupart des Arduino sont 8 amers, ce qui entraînera des différences dans les types de données, ce qui constitue un point d'attention supplémentaire lors de l'utilisation de cette méthode.
La bibliothèque Arduino-Debug fournit un débogueur simple cible pour les croquis Arduino. Les commandes de débogage sont ajoutées directement à l'esquisse. Un shell de commande du débogueur est démarré sur les points d'arrêt et les assertions.
La capture d'écran ci-dessus montre l' exemple d'esquisse exécuté sur un Arduino Mega avec un moniteur de sortie série utilisé par l'application et Serial1 utilisé pour le shell du débogueur.
Commandes de débogage d'esquisse
Commandes de débogage du shell
Toutes les commandes du shell de débogage peuvent être abrégées en commandes à un seul caractère. Veuillez consulter le README pour plus de détails; détails de l'installation, exemple d'esquisse et d'analyse comparative.