Go Down

Topic: Comment debugger du code arduino complexe? (Read 952 times) previous topic - next topic

SEBASS

Oct 18, 2011, 05:58 pm Last Edit: Oct 20, 2011, 01:12 am by SEBASS Reason: 1
Bonjour,
Existe -t-il une sorte de debugger qui pourrait fonctionner en mode pas à pas un peu comme un visual studio avec des break point par ex?
C'est dommage qu'il n'y ait pas cette possibilité dans l'IDE d'arduino.
On peut toujours placer des traces avec la méthode serial pour retourner des variables mais c'est tout de même pas très pratique de compiler et linker à chaque fois.
Est-ce que quelqu'un à une autre solution pour pouvoir debugger/simuler des codes complexes et lire ces variables progressivement ?
J'ai tout de même l'impression que l'environnement Arduino n' est pas vraiment fait pour ça!
Ce qui est contradictoire est le fait qu'il est possible d'atteindre des niveaux de complexité importants vu l'étendu du "Language Reference"
Vous en pensez quoi ? 
Merci

Tealcoune

il est peut être possible.. apres personnellement je sais pas ... avant quand je développais avec des pics .. j'utilisai la EasyPic3 .. mais j'avais lu comme quoi la EasyPic 4 ou 5 avais un débugger intégrer a la carte de dev ... maintenant sa doit être assez compliquer de mettre sa en oeuvre.. sur l'arduino..
Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

skywodd

Bonjour,

A moins d'avoir un débuggeur comme l'AVR dragon c'est impossible de faire du pas à pas sur une carte arduino.

Les microcontroleurs utilisaient dans les boards arduino n'utilisent plus le JTAG pour le débugage par conséquent les débuggeur DIY JTAG ne fonctionne plus.
A la place ils utilisent le protocole SWD (single wire debug), protocole jalousement gardé secret par ATMEL, à l'heure actuelle je ne crois pas qu'il existe de débuggeur DIY (ou non atmel) supportant le SWD d'atmel.

Si tu à un débuggeur  MKII, AVR dragon, ... copie les fichiers généré lors de la compilation (.elf, .lst, ...) qui ce trouve dans le dossier temp et ajoute les dans un projet avrstudio, connecte ton débuggeur et tu devrait pouvoir lancer le debug (! debug du code final donc avec tout le "core" arduino).
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

al1fch

#3
Oct 19, 2011, 12:00 am Last Edit: Oct 19, 2011, 12:11 am by al1fch Reason: 1
Même réponse que skywood
3 petits ajouts :

-le protocole debugWire utilisé sur les AVR sans JTAG commence a etre mis à jour mais je ne sais pas si les résultats sont exploitables à ce niveau ... ca viendra sans doute un jour:
http://ruemohr.org/docs/debugwire.html

-le debugWire utilise intensivement la broche Reset. Une modification des cartes Arduino est nécessaire selon cette page pour les heureux possesseurs d'un 'Dragon':
http://husks.wordpress.com/2010/02/21/modify-an-arduino-for-debugwire/

-le fichier elf permet un débuggage sommaire par simulation dans AvrStudio ou autre soft possédant un simulateur AVR et acceptant le format elf (Proteus par exemple). Le débuggage par simulation, c'est mieux que rien !

Quote
J'ai tout de même l'impression que l'environnement Arduino n' est pas vraiment fait pour ça!

Même impression. Les atouts d'Arduino sont ailleurs !!

fdufnews

Quote
J'ai tout de même l'impression que l'environnement Arduino n' est pas vraiment fait pour ça!

Tout à fait d'accord en conséquence de quoi il faut travailler autrement.
- découper son programme en fonctions simples
- les tester de manière unitaire
- quand le test unitaire des fonctions est terminé on intègre les fonctions dans le programme final.

kriss-38

J'utilise une méthode qui marche plutot bien et qui est simple a mettre en oeuvre:

Chaque fois que j ai besoin de surveiller une variable, ou le passage dans un point precis du sketch, je rajoute a cet endroit une instruction Serial .print() ou Serial.println()  (ne pas oublier le Serial.begin() dans le setup() ). Lorsque la partie concernée est au point, j'enlève ces quelques lignes Serial.xxx() .
J'utilise le Serial Monitor pour visauliser le resultat correspondant.

schizophrene


On peut toujours placer des traces avec la méthode serial pour retourner des variables mais c'est tout de même pas très pratique de compiler et linker à chaque fois.


SEBASS connait déjà cette technique :)

SEBASS


- découper son programme en fonctions simples
- les tester de manière unitaire
- quand le test unitaire des fonctions est terminé on intègre les fonctions dans le programme final.



Oui, c'est ce que j'applique, il faut y aller progressivement finalement
C'est une question d'organisation avant tout ce qui évite déjà pas mal de gros pb...
J'ai aussi cette solution:
Je vérifie mon code dans un projet C++ de Visual Studio pour simuler certains calculs avec F5 (en mode debogage + break point), il faut après l'adapter par rapport au code arduino en simulant certaine fonctions.
Dans tous les cas merci pour vos idées

Go Up