web-dev-qa-db-fra.com

Comment déboguez-vous du code Arduino fonctionnant sur du matériel Arduino?

Existe-t-il un moyen de définir des points d'arrêt au niveau source, d'exécuter le code sur le matériel réel et de pouvoir inspecter les variables et continuer?

36
user122299

Le plugin Visual Micro pour Microsoft Visual Studio 2015 Community Edition (gratuit) fournit un débogueur USB pour Arduino. Il vous permet de faire exactement ce que vous décrivez. (N'oubliez pas de cliquer pour installer C++ pendant IDE install)

Le débogueur prend en charge série, RF, Bluetooth et certains Wi-Fi. Il permet de surveiller ou de mettre à jour les valeurs des variables pendant le fonctionnement de l'Arduino. Les visualisations de graphiques et de données/broches ainsi que la montre, la trace et la pause sont incluses.

Enter image description here

Nouvelles: janvier 2016 comprend également la sortie d'un débogueur GDB pour l'Arduino Zero. Comme avec le débogueur Serial/Bluetooth, la version GDB prend en charge le code source ino/cpp, mais prend également en charge le débogage du noyau Arduino et des bibliothèques. Il prend en charge de nombreuses fonctionnalités telles que: l'étape, l'étape, l'instruction étape ou la ligne source, la mémoire, les registres, les sections locales, la montre, les expressions en direct et la trace de la pile.

31
Visual Micro

La façon de définir des "points d'arrêt source" sur l'Arduino consiste à ajouter une sortie série pour envoyer la valeur que vous souhaitez voir au moniteur série.

Lorsque vous êtes prêt, l'étape suivante consiste à passer à WinAVR, AVR Studio et un Atmel JTAG Mark II ou un Atmel Dragon.

Ces programmes et dispositifs vous permettront de créer du code C et une étape unique à travers le code et de surveiller les variables et les registres. Les périphériques JTAG peuvent parcourir en une seule étape votre code C ou le code d'assembly créé par le compilateur.

Soyez averti que la programmation C intégrée de haut niveau est toujours très proche de la machine et vous devez être prudent avec les routines d'interruption pas à pas, les routines de minuterie et d'autres routines de bas niveau, car cela empêchera souvent le code de fonctionner correctement.

24
Jeff

Pour inspecter les variables, je les imprime simplement sur le moniteur série. Voici un exemple sur lequel je travaille en ce moment:

# Setup
Serial.begin(9600);

# Loop
Serial.println(String(index) + " : " + String(total) + " : " + String(average));
2
user1617687