IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Déboguer un code Arduino ?


Sujet :

Arduino

  1. #1
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut Déboguer un code Arduino ?
    Salut,

    Je voulais savoir quels sont les divers moyens de déboguer un code Arduino.

    Y a-t-il des solutions pratiques pour cela ?


    Je suppose que certains utilisent le port série et les fonctions telles que print, println... C'est déjà pas mal mais là on est quand même limité (pas de points d’arrêt, pas de mode pas à pas,...).

    Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 897
    Par défaut
    Sur les petits Arduinos, pas possible de connecter un debugger externe.. donc c'est de la débrouille. port série, leds qui clignotent, oscilloscope, espionage hardware des bus.
    Sur les cartes plus avancées (MKR, ESP) on peut attacher GDB au travers d'un JTAG debugger, faut parfois un peu bricoler...

    Bien sûr le mieux c'est de ne pas faire de bug

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Merci.

    Citation Envoyé par Jay M Voir le message
    Sur les petits Arduinos, pas possible de connecter un debugger externe...
    La uno c'est un petit arduino ?



    ------------

    PS : Avec le port série j'ai trouvé cette librairie : SerialDebug

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 251
    Par défaut
    Bonsoir,
    Sauf erreur de ma part la famille ATmega (le UNO, le MEGA) peut-être raccordée à une sonde type Atmel ICE :
    https://wspublishing.net/avr-c/ardui...ce-connection/

    Évidemment il faut passer sous un IDE adapté comme Atmel Studio, qui est une Eclipse déguisé. De là on a accès au point d'arrêt, mode pas à pas, vu en direct sur la RAM etc...

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Merci je regarde ça...

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 897
    Par défaut
    J’étais resté sur l’impression (mais ça date un peu, j’avoue ne pas avoir regardé récemment) que c’était une grosse galère pour faire quoi que ce soit (définition de nouvelles cartes, couper une trace sur la Uno, changement d’ide, modification de avrdude etc) pour des résultats légers et c’était cher ... peut être ils ont faut des progrès

    Dites nous ce que vous découvrez!

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Je crois que j'ai un peu la même impression, cela ne me semble pas évident, sans doute que c'est plus simple pour ceux qui ont déjà utilisé ce genre d'outils mais au début il faut pouvoir réunir toutes les infos et faire les bon choix...

    - Je vois déjà qu'il faut acheter un "truc", je ne sais pas trop comment on appelle ce dispositif électronique qui permet de programmer/déboguer un microcontrôleur... Le lien de Vincent pointe sur le Atmel-ICE, qui est par exemple recommandé ici... Certains le vendent 120 euros environs...

    - Ensuite il "faut" apparemment utiliser Atmel Studio : je l'ai téléchargé... C'est une usine à gaz quand même et j'aurais bien voulu utiliser VS Code (je ne sais pas si c'est possible)...


    Citation Envoyé par Jay M Voir le message
    couper une trace sur la Uno,
    Je ne suis pas sûr de savoir de quoi tu veux parler mais cela me fait penser à ça :

    Nom : arduino.PNG
Affichages : 1412
Taille : 1,25 Mo
    Source : ici.

    Je ne sais pas si c'est toujours d'actualité...


    Enfin comme toi je me demande si ça vaut le coup...

    A la limite je vois qu'on peut utiliser un simulateur, bien sûr ce n'est pas pareil mais c'est mieux que rien...

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Beginner. Voir le message

    - Je vois déjà qu'il faut acheter un "truc", je ne sais pas trop comment on appelle ce dispositif électronique qui permet de programmer/déboguer un microcontrôleur... Le lien de Vincent pointe sur le Atmel-ICE, qui est par exemple recommandé ici... Certains le vendent 120 euros environs...
    Sur le site de microchip il semble moins cher : https://www.microchipdirect.com/prod...ll/ATATMEL-ICE

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    J'ai découvert une vidéo où l'auteur nous explique un moyen de déboguer une Arduino Uno pour pas cher... Cela nécessite le kit ATmega328P Xplained Mini :

    The ATmega328P Xplained Mini evalutation kit is a hardware platform for evaluating the ATmega328P microcontroller. The evaluation kit comes with a fully integrated debugger that provides seamless integration with Atmel Studio. The kit provides access to the features of the ATmega328P enabling easy integration of the device in a custom design
    Il y a la doc sur le site Microchip : https://www.microchip.com/Developmen...MEGA328P-XMINI

    Cela semble pas mal au premier abord, je pense que je vais tester...

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 018
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 018
    Par défaut
    Bonjour,

    Il y a une extension à Visual Studio (version Community 2019 gratuite) Visual Micro https://www.visualmicro.com/ qui permet de faire du développement Arduino sur Visual studio et aussi un peu de Debug (le Debug est gratuit pendant 45 jours pas très cher au-delà). De mémoire l'extension met d'office un certain nombre de points d'arrêts (donc on voit si on passe) mais on a rarement un point d'arrêt ou en a besoin. On peut aussi mettre un point d'arrêt comme dans un IDE classique en cliquant sur une ligne de code (mais en fait le téléchargement du prog est effectué a chaque pose d'un point d'arrêt) donc on gagne pas grand chose.

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Merci j'ai trouvé quelques liens concernant Visual Micro...

  12. #12
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 994
    Par défaut
    Bonjour,

    Le debug sur microcontrôleur est compliqué, il faut :
    - un µC adapté
    - une carte adaptée
    - un EDI adapté.
    Avec Arduino on a Software Serial qui est un bon palliatif

    De plus, les fonctions de débogage hardware monopolisent toujours quelques broches, donc si votre microcontrôleur est "chargé" et bien vous ne pouvez plus utiliser le débogage.

    Sinon c'est la débrouille... le plus évident étant d'utiliser les fonctions d'affichages du projet en cours de development.

    Toute mesure a tendance a perturber ce qu'on veut mesurer, et le débug est une sorte de mesure...
    Si une fonction de débogage ralentit le traitement alors pour certaines fonctions liées au hardware c'est pas possible
    Le pire étant d'avoir un code qui marche avec les fonctions de débogage et qui ne marche plus une fois qu'on les enlève
    Parfois, le bug vient... de la fonction de débogage qu'on a écrite (exemple typique : valeur mal affichée car mal convertie en chaine de caractère)

    Sur microcontrôleur, il faut faire attention, et bien tester chaque étape ou chaque fonction de son code.
    C'est la galère mais normalement sur un microcontrôleur on a des petites applications car on est limité par la capacité de la flash et de la RAM.

    Un bon programmeur organisé et patient peut arriver à mettre au point un programme sans débogueur.

    J'arrive à exploiter à fond les possibilités d'une carte Arduino UNO, du shield Ethernet, d'un écran graphique tactile, d'un RTC et d'un module IR "à l'ancienne" juste avec Notepad++, l'EDI Arduino étant utilisé juste pour la compilation et le téléversement.
    Il faut du temps et de la patience, ne pas tester de nombreuses modifs d'un coup, bien structurer son code. Ne pas oublier de conserver chaque version pour pouvoir revenir en arrière.
    C'est bien ça muscle le cerveau, ça fait une bonne prévention des maladies neurodégénératives - je vais demander à ma mutuelle de me rembourser mes Arduinos
    C'est bien aussi car ça oblige a être rigoureux et à écrire du code propre (ou pas trop sale ) car sinon on est vite coincé.

    Petite astuce : si vous avez un Arduino qui communique (I2C, Ethernet, UART, infrarouge...) et bien branchez de l'autre côté un ordinateur qui va vous permettre d'éplucher en détail les échanges. Wireshark est indispensable quand on travaille sur Ethernet, la première chose que j'ai faite c'est de me créer un petit client Ethernet et un petit serveur Ethernet avec Visual Basic .NET pour contrôler ce que l'Arduino reçoit et ce qu'il envoit.

    Nos ancêtres avaient bien plus de mérite : ils ont fait la même chose mais tout en assembleur, avec du hardware encore plus limité : sympa les EPROM UV qui mettent 30 minutes à écrire, et je ne parle pas des bandes magnétiques et cartes perforées. A l'époque, ils vérifiaient patiemment les algorithmes à la main avant de pouvoir utiliser l'ordinateur de l'université pendant la petite demi-heure de temps de calcul que chacun avait chaque semaine.

    Nos ancêtres qui ont déchiffré Enigma et qui ont envoyé marcher des hommes sur la Lune sont de vrais héros de la programmation.

    Aujourd'hui, on voit des "bêtes de courses", c'est à dire des microcontrôleurs ayant des performances similaires aux ordinateurs des années 1980 ou 1990.
    Beaucoup de flash, beaucoup de RAM, des CPU à plusieurs cœurs et/ou multitâches...
    Ces microcontrôleurs peuvent exécuter des grosses applications, et là pour s'en sortir il faut inclure de vraies fonctions de débogage.
    En fait, sur ce type de matériel, on est plus vraiment sur du microcontrôleur mais sur de l'ordinateur monocarte.

    Dernière remarque : l'optimisation des algorithmes et de l'implémentation du code est souvent nécessaire mais elle complique fortement le débogage.

    A bientôt

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Oui le débogage des microcontrôleurs n'est pas évident et on est forcément limité notamment au niveau matériel où il n'est pas possible de faire du temps réel (eh oui si par exemple on met un point d’arrêt on suspend l’exécution au niveau logiciel mais pendant ce temps-là ça continu au niveau matériel...).

    Et si on fait uniquement du débogage logiciel alors c'est vrai que je commence à me dire qu'un bon simulateur pourrait faire l'affaire... J'en ai testé deux dernièrement, celui d'AT7 et SimulIDE...

    J'aime bien faire du pas à pas et regarder l’état des ports et registres ainsi que le code assembleur correspondant au source C++ par exemple pour comprendre le code, éventuellement l'optimiser ou compter le nombre d'octet et de cycle d'horloge...


    Citation Envoyé par electroremy Voir le message
    Avec Arduino on a Software Serial qui est un bon palliatif
    Comment l'utilises-tu ? Pourquoi ne pas utiliser le port série "matériel" (UART) ? Alors c'est vrai que si on veux aussi déboguer le port série il vaudrait mieux en utiliser un autre... Par contre il faudra du matériel supplémentaire pour communiquer avec le PC via Software Serial, non ?

    Citation Envoyé par electroremy Voir le message
    Toute mesure a tendance a perturber ce qu'on veut mesurer, et le débug est une sorte de mesure...
    Si une fonction de débogage ralentit le traitement alors pour certaines fonctions liées au hardware c'est pas possible
    Oui effectivement même quand on utilise le port série pour envoyer le contenu de certaines variables eh bien cela prend du temps pendant lequel il peut se passer des choses au niveau matériel...


    Citation Envoyé par electroremy Voir le message
    Ne pas oublier de conserver chaque version pour pouvoir revenir en arrière.
    C'est ce que je fais mais c'est pénible avec Arduino car il faut à chaque fois un nouveau fichier avec répertoire du même nom...

    Citation Envoyé par electroremy Voir le message
    C'est bien ça muscle le cerveau, ça fait une bonne prévention des maladies neurodégénératives...
    Ah ça c'est motivant...

    Citation Envoyé par electroremy Voir le message
    Petite astuce : si vous avez un Arduino qui communique (I2C, Ethernet, UART, infrarouge...) et bien branchez de l'autre côté un ordinateur qui va vous permettre d'éplucher en détail les échanges. Wireshark est indispensable quand on travaille sur Ethernet, la première chose que j'ai faite c'est de me créer un petit client Ethernet et un petit serveur Ethernet avec Visual Basic .NET pour contrôler ce que l'Arduino reçoit et ce qu'il envoit.
    Comment on branche l'ordinateur ? Il faut du matériel, non ? Genre un analyseur logique ?

  14. #14
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 251
    Par défaut
    Bonjour,
    Citation Envoyé par Beginner. Voir le message
    on est forcément limité notamment au niveau matériel où il n'est pas possible de faire du temps réel (eh oui si par exemple on met un point d’arrêt on suspend l’exécution au niveau logiciel mais pendant ce temps-là ça continu au niveau matériel...)

    [...]

    J'aime bien faire du pas à pas et regarder l’état des ports et registres ainsi que le code assembleur correspondant au source C++ par exemple pour comprendre le code, éventuellement l'optimiser ou compter le nombre d'octet et de cycle d'horloge...
    Tout ça est possible sur beaucoup d'autres plateformes (LaunchPad de chez TI, Nucléo de chez ST, NXP, PIC, SAM-D), des vrais points d'arrêt qui stop l'horloge interne du microcontrôleur, du mode pas à pas, la vue en direct sur l'intérieur du micro etc... Il n'y a que ce qui est asynchrone où on n'a pas la main, l'UART par exemple.

    Malheureusement sur ce coup Arduino UNO ou MEGA sont les pires des plateformes car la sonde Atmel ICE n'est pas pour rien, Nucléo ou LaunchPad intègrent le débuggeur sur la carte électronique.

    A+

  15. #15
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Merci Vincent,

    Ah oui c'est vrai j'y pensais plus aux "vrais points d'arrêt qui stop l'horloge interne du microcontrôleur...".

    Ceci dit quand je disais "...on est forcément limité notamment au niveau matériel où il n'est pas possible de faire du temps réel (eh oui si par exemple on met un point d’arrêt on suspend l’exécution au niveau logiciel mais pendant ce temps-là ça continu au niveau matériel...)"...

    Je voulais parler du matériel extérieur genre par exemple si tu veux mesurer la période d'un signal présent à la pin n eh bien tu ne peux pas mettre un point d’arrêt car cela fausserait la mesure du temps... Bon ça c'est normal il ne faut pas trop en demander non plus....

  16. #16
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 994
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Comment l'utilises-tu ? Pourquoi ne pas utiliser le port série "matériel" (UART) ? Alors c'est vrai que si on veux aussi déboguer le port série il vaudrait mieux en utiliser un autre... Par contre il faudra du matériel supplémentaire pour communiquer avec le PC via Software Serial, non ?
    Ma langue a fourchée je voulais pas dire "software serial" mais "moniteur série"

    La plupart des examples de code Arduino utilise ce moniteur série, c'est l'équivalent de debug.print dans VB et C# en .NET

    C'est pratique mais :
    - cela monopolise les pins 0 et 1 (RX/TX)
    - cela demande du travail au CPU
    - cela utilise souvent les fonctions de la maudite classe string.h

    Citation Envoyé par Beginner. Voir le message
    Et si on fait uniquement du débogage logiciel alors c'est vrai que je commence à me dire qu'un bon simulateur pourrait faire l'affaire...
    Oui, la difficulté du simulateur c'est pas de simuler l'Arduino, mais de simuler l'Arduino avec tout ce qui est branché dessus.

    Simuler un Arduino tout seul c'est relativement facile, mais ça ne sert pas à grand chose

    Je me suis amusé à faire avec VB.NET un simulateur de mon projet de client Ethernet Arduino avec écran tactile... ce fut un projet à part entière, et finalement ça me fait une "interface virtuelle" pour ordinateur. C'était intéressant à faire mais pour du débogage c'est clairement excessif. Et même si mon simulateur fonctionne très bien, il y a certaines fonctions liées au hardware que je n'ai pas pu simuler, faute de pouvoir faire la même chose avec un ordinateur, car un ordinateur n'a pas de GPIO.

    Citation Envoyé par Beginner. Voir le message
    Comment on branche l'ordinateur ? Il faut du matériel, non ? Genre un analyseur logique ?
    Pas forcément, tout dépend de l'interface.

    Pour de l'I2C effectivement un oscilloscope numérique permet de faire le décodage.
    Sinon, on peut utiliser une petite interface I2C / USB et le logiciel qui va bien sur PC.

    Idem pour le port série (UART).

    Si ton Arduino est un serveur ou un client TCP/IP ou UDP, avec un protocole HTTP, telnet ou autre... là c'est facile, un ordinateur est conçu pour gérer cela.
    Le shield Ethernet est relié à ton réseau local avec un câble réseau, l'ordinateur qui est sur le même réseau local peut communiquer avec.
    Pour le Wifi même principe.

    Un logiciel comme Wireshark permet d'éplucher les données brutes.
    Un navigateur Internet permet d'avoir le résultat final.
    Entre les deux, tu peux programmer en VB.NET ou en C# un petit logiciel client maison avec une classe HTTP listener

    Bien sûr, il faut s'y connaitre un peu en config réseau, savoir configurer son réseau local avec le DHCP ou les IP fixes...

    Bref ça demande quand même des compétences.

    J'ai la chance d'avoir commencé Arduino tardivement, c'est à dire qu'au moment de mettre à l'Arduino, j'avais déjà de l'expérience dans :
    - la programmation sur PC
    - la programmation web
    - l'électronique analogique et numérique
    - la programmation 8051 en assembleur, qui permet de comprendre les grands principes au niveau du hardware

    Ceux qui ont commencé par Arduino, et qui veulent faire une vraie application (donc pas seulement adapter les petits exemples) sont confrontés rapidement à la nécessité de devoir apprendre les règles de l'électronique et de la programmation de façon plus approfondie.

    Un "kit" d'initiation à l'Arduino digne de ce nom devrait inclure un petit livre d'initiation à l'électronique et un petit livre d'initiation à la programmation.

    Le débogage c'est bien mais c'est un plus d'être capable de s'en passer.

    A bientôt

Discussions similaires

  1. Comment bien déboguer son code ?
    Par D[r]eadLock dans le forum Débuter
    Réponses: 47
    Dernier message: 02/04/2024, 16h06
  2. Déboguer du code SQL
    Par Lolitaaa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/06/2009, 13h35
  3. comment déboguer son code ?
    Par AdHoc dans le forum Zend
    Réponses: 11
    Dernier message: 05/02/2007, 15h03
  4. Aide pour déboguer un code
    Par raou123 dans le forum Assembleur
    Réponses: 3
    Dernier message: 12/04/2006, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo