[Programmation] Pb compilation Arduino & libraries
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Pb compilation Arduino & libraries



  1. #1
    Atroverso

    Pb compilation Arduino & libraries


    ------

    Bonjour,

    J'imagine que beaucoup de bricoleur en électronique ont déjà touché à l'Arduino et je cherche de l'aide.

    J'ai un serveur Ethernet qui fonctionnait très bien quand je le compilais avec mon IDE Arduino en version 1.0.

    Depuis je suis passé à l'IDE le plus récent, version 1.8.5 et mon programme ne compile plus du tout, et en prime je ne pige plus rien au rapport d'erreur.

    Je vous cite une bonne partie du rapport d'erreur concernant apparemment un problème dans ma librairie Ethernet (et j'ai le même genre de ligne pour la SPI):
    Code:
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:144:9: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    
         url = ""; // on remet à zéro notre chaîne tampon
    
             ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:163:20: warning: array subscript has type 'char' [-Wchar-subscripts]
    
               url[index] = carlu;
    
                        ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:169:20: warning: array subscript has type 'char' [-Wchar-subscripts]
    
               url[index] = '\0';
    
                        ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino: In function 'boolean interpreter()':
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:257:41: warning: array subscript has type 'char' [-Wchar-subscripts]
    
       while(url[index-1] != 'b' && url[index] != '=') { // On commence par chercher le "b="
    
                                             ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:266:18: warning: array subscript has type 'char' [-Wchar-subscripts]
    
       while(url[index] != '&') { // On cherche le '&'
    
                      ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:267:17: warning: array subscript has type 'char' [-Wchar-subscripts]
    
         if(url[index] >= '3' && url[index] <= '5') {
    
                     ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:267:38: warning: array subscript has type 'char' [-Wchar-subscripts]
    
         if(url[index] >= '3' && url[index] <= '5') {
    
                                          ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:269:30: warning: array subscript has type 'char' [-Wchar-subscripts]
    
           char broche = url[index]-'0'; // On ramène ça au format décimal
    
                                  ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:283:41: warning: array subscript has type 'char' [-Wchar-subscripts]
    
       while(url[index-1] != 'p' && url[index] != '=' && index<100) {
    
                                             ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:292:18: warning: array subscript has type 'char' [-Wchar-subscripts]
    
       while(url[index] != ' ') { // On cherche le ' ' final
    
                      ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:293:17: warning: array subscript has type 'char' [-Wchar-subscripts]
    
         if(url[index] >= '0' && url[index] <= '9') {
    
                     ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:293:38: warning: array subscript has type 'char' [-Wchar-subscripts]
    
         if(url[index] >= '0' && url[index] <= '9') {
    
                                          ^
    
    C:\Users\Session\AppData\Local\Temp\arduino_modified_sketch_589968\Ethernet-RF.ino:295:27: warning: array subscript has type 'char' [-Wchar-subscripts]
    
           char val = url[index]-'0'; // On ramene ca au format decimal
    
                               ^
    
    Compiling libraries...
    L'autre élément qui a changé est que je compile sur une deuxième carte Uno, la première (fonctionnelle de la version 1.0) étant toujours en service.
    Donc peut-être que ma deuxième carte à un défaut, mais ce n'est pas ce que semble traduire le rpport.

    Voilà, si des gens peuvent me donner leurs réflexions

    -----
    Dernière modification par Antoane ; 07/03/2018 à 09h41. Motif: Ajout de balises code

  2. #2
    antek

    Re : Pb compilation Arduino & libraries

    J'y connais ren en Arduichose, mais en général "warning" est une information non bloquante.

  3. #3
    nornand

    Re : Pb compilation Arduino & libraries

    bjs, il a été précisé que sur la version 1 . 8. 5 les warnings apparaissais car le logiciel demande une programmation plus structurée .

  4. #4
    3king

    Re : Pb compilation Arduino & libraries

    Comment sont déclarées les variables url et index ?

  5. A voir en vidéo sur Futura
  6. #5
    Ikhar84
    Animateur Informatique

    Re : Pb compilation Arduino & libraries

    Oui comme dit les Warnings sont non bloquants, mais ils traduisent un possibilité que le programme généré sera instable ou ne réagira pas toujours comme prévu.
    Les messages de chaque Warning sont très explicite:
    Pour le premier par exemple, la conversion d'une constante chaine de caractére (constant string, en général, une chaine de caractère entre guillementes double), vers un pointeur sur des caractéres est dépréciée, soit obsolète...

    Reste à voir le code complet pour un véritable analyse...
    J'ai glissé Chef !

  7. #6
    invite936c567e

    Re : Pb compilation Arduino & libraries

    Bonsoir

    Code:
    url = ""; // on remet à zéro notre chaîne tampon
    Contrairement à ce qu'indique le commentaire, ce code ne demande pas de mettre à zéro la chaîne du tampon, mais d'enregistrer l'adresse d'une chaîne vide "" (constituée d'un caractère nul de fin de chaîne) dans le pointeur url. Après cela, le pointeur url ne pointe plus sur le début du tampon.

    La remise à zéro d'une chaîne s'opère plutôt comme suit :
    Code:
    *url = '\0'; // on remet à zéro notre chaîne tampon
    ou :
    Code:
    url[0] = '\0'; // on remet à zéro notre chaîne tampon

  8. #7
    invitef86a6203

    Re : Pb compilation Arduino & libraries

    PA5CAL l'oeil de linx
    Intéressant !
    Une erreur subtile qui plante le prog en parfait silence !
    A se demander si ce bout à vraiment déjà fonctionné , comme l'indique le post #1.
    C'est vrai qu'une liste interminable de warning , nous détourne du réel bug.
    ça m'étonnerais que le compilateur, même d'une ancienne version ai fait un prog qui fonctionne ?
    A moins que la chaine constante dans l'ancienne version soit en mémoire vive, et qu'elle écrasait les données suivante en mémoire lors d'écriture ?
    (limitant les dégâts surtout si la chaine suivante est du texte, et la chaine url juste 1 char)


    Normalement on écrit " strcpy(url,""); "
    ça créé une chaine vide inutile, mais au moins ça fonctionne...

    Vu que notre ami a fait 24 posts en 4 ans, il reviendra dans 2 mois LOL.

  9. #8
    Atroverso

    Re : Pb compilation Arduino & libraries

    Citation Envoyé par freepicbasic Voir le message
    PA5CAL l'oeil de linx
    Vu que notre ami a fait 24 posts en 4 ans, il reviendra dans 2 mois LOL.
    Mais quelle mauvaise langue !!

    Les passions qui demande de la réflexion n'ont pas autant de membres actifs que les fans de télé réalité, alors je ne m'attendais pas a avoir une réponse immédiatement...
    Surtout que jusqu'à présent personne n'avait de piste à me proposer.

    Donc un grand merci à PA5CAL qui a déjà mis le doigt sur un problème (et pourtant oui ce code fonctionnait en 1.0 !)

    Maintenant j'ai ces logs qui apparaissent quand je veux compiler, apparemment j'ai un problème dans les fonctions où je déclare IP, Masque & Co :

    Code:
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:65:39: error: no matching function for call to 'W5100Class::setIPAddress(IPAddress::<anonymous union>&)'
    
       W5100.setIPAddress(local_ip._address);
    
                                           ^
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:65:39: note: candidate is:
    
    In file included from C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:1:0:
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\utility/w5100.h:392:6: note: void W5100Class::setIPAddress(uint8_t*)
    
     void W5100Class::setIPAddress(uint8_t *_addr) {
    
          ^
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\utility/w5100.h:392:6: note:   no known conversion for argument 1 from 'IPAddress::<anonymous union>' to 'uint8_t* {aka unsigned char*}'
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:66:38: error: no matching function for call to 'W5100Class::setGatewayIp(IPAddress::<anonymous union>&)'
    
       W5100.setGatewayIp(gateway._address);
    
                                          ^
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:66:38: note: candidate is:
    
    In file included from C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:1:0:
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\utility/w5100.h:368:6: note: void W5100Class::setGatewayIp(uint8_t*)
    
     void W5100Class::setGatewayIp(uint8_t *_addr) {
    
          ^
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\utility/w5100.h:368:6: note:   no known conversion for argument 1 from 'IPAddress::<anonymous union>' to 'uint8_t* {aka unsigned char*}'
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:67:38: error: no matching function for call to 'W5100Class::setSubnetMask(IPAddress::<anonymous union>&)'
    
       W5100.setSubnetMask(subnet._address);
    
                                          ^
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:67:38: note: candidate is:
    
    In file included from C:\Users\Session\Documents\Arduino\libraries\Ethernet\Ethernet.cpp:1:0:
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\utility/w5100.h:376:6: note: void W5100Class::setSubnetMask(uint8_t*)
    
     void W5100Class::setSubnetMask(uint8_t *_addr) {
    
          ^
    
    C:\Users\Session\Documents\Arduino\libraries\Ethernet\utility/w5100.h:376:6: note:   no known conversion for argument 1 from 'IPAddress::<anonymous union>' to 'uint8_t* {aka unsigned char*}'
    Sachant que mon code est écrit ainsi pour définir l'adresse IP, MAC etc de mon Arduino (les valeurs sont fictives, je les ai modifié pour le forum)

    Code:
    IPAddress gateway(173,196,2,1);
    IPAddress subnet(255,255,255,0);
    IPAddress ip(173,196,2,10);

  10. #9
    invite936c567e

    Re : Pb compilation Arduino & libraries

    La méthode setIPAddress() de la classe W5100Class attend un pointeur vers des octets. Or, on lui passe par référence l'attribut d'un objet de classe IPAddress, dont le type correspond à l'union suivante :
    Code:
        union {
    	uint8_t bytes[4];  // IPv4 address
    	uint32_t dword;
        } _address;

  11. #10
    invite936c567e

    Re : Pb compilation Arduino & libraries

    En principe, le code de la bibliothèque Ethernet fournie par Arduino est conçu pour aboutir à présenter l'attribut ._address.bytes (au lieu de ._address tout court) en argument de la méthode W5100Class::setIPAddress() (de même pour les méthodes suivantes dans la liste d'erreurs).

    Je ne saurais dire pour quelle raison cela n'est pas réalisé. Il faudrait que tu vérifies la compatibilité des versions de ta bibliothèque Ethernet et de ton IDE Arduino, si le code de cette bibliothèque n'aurait pas été modifié, et si ton code n'aurait pas redéfini certaines fonctions ou macro-commandes qu'elle utilise.

  12. #11
    Atroverso

    Re : Pb compilation Arduino & libraries

    Ce serait la raison la plus probable car mis à part la MAJ. De mon IDE je n'ai jamais rien change entre le moment où ça fonctionnait et le moment où ça plantait.
    Je fais des tests ce soir.

  13. #12
    invitef86a6203

    Re : Pb compilation Arduino & libraries

    heureux de te relire!

    Sur ce fichier;
    https://github.com/esp8266/Arduino/b...c/Ethernet.cpp

    La fonction attend un pointeur ;
    W5100.setIPAddress(_dhcp->getLocalIp().raw_address());

    Et sur cette librairie;
    https://github.com/lstoll/arduino-li...tility/w5100.h
    Aucune fonction setIPAddress.
    Ce qui laisserait penser qu'il y a plusieurs sources de librairie.
    Par contre il y a cette fonction;
    extern void setSIPR(uint8 * addr); // set local IP address
    Là encore un pointeur!

    Je sais que cette notion de pointeur est souvent difficile à maitriser, même avec l'expérience on peut parfois faire des erreurs...

  14. #13
    Atroverso

    Re : Pb compilation Arduino & libraries

    Dans les warning j'ai effectivement constaté que l'IDE détecteur plusieurs librairie et m'informait qu'il avait choisi tellle ou telle librairie pour la compilation. Mais même après avoir fait du ménage pour n'en avoir qu'une ça n'avait rien changé

  15. #14
    invitef86a6203

    Re : Pb compilation Arduino & libraries

    regarde ce qu'il y a dans la lib .
    Si la fonction existe et si oui comment est elle déclarée ?

  16. #15
    invitef86a6203

    Re : Pb compilation Arduino & libraries

    W5100.setGatewayIp(gateway._ad dress);
    void W5100Class::setGatewayIp(uint8 _t *_addr) {
    ça colle pas !

    Il veut un pointeur;
    W5100.setGatewayIp(&gateway._address);

  17. #16
    Atroverso

    Re : Pb compilation Arduino & libraries

    C'est à dire ?
    Je dois modifier la librairie ? Ca me parait bizarre depuis le temps qu'elle existe !

  18. #17
    invitef86a6203

    Re : Pb compilation Arduino & libraries

    On ne peut répondre qu'avec les éléments qu'on nous donne...

    Quand on démarre un projet et qu' on utilise une librairie, on regarde le prototype et envoie les paramètres que la fonction a besoin.

    ici le protype que donne le compilateur est
    void W5100Class::setGatewayIp(uint8 _t *_addr) {
    Donc un pointeur

    Dans le prog on a ça ;
    W5100.setGatewayIp(gateway._ad dress);
    Ce n'est pas un pointeur !

    Si le prog est le même on peut en déduire que la librairie à changée. (mais pas forcément)

    Il faudrait recompiler l'ancienne version qui n'a pas de modif.
    Si on a changé de version de compilateur avec l'ancienne puis la nouvelle.
    Et voir ce que ça dit.
    Parfois les nouvelles versions de compilateurs sortent des erreurs sous-jacentes qu'on ne voyait pas avant, ou des warnings, comme cela a été dit, car des options de compilation ont changées.

    De toutes façons , il y avait une erreur avec url , une confusion entre donnée et pointeur.
    Cette erreur peut être fatal, mais si la donnée qui dépasse écrase seulement du texte, ça ne plante pas, au pire ça envoie un texte un peu vérolé.
    Et si le texte est utilisé une fois avant ou jamais, il n'y a rien de visible.
    C'est une erreur cachée , ça laisse un peu septique sur l'expérience de l'auteur...
    Va savoir , s'il en persiste d'autres ?
    strcpy(url,""); ou
    url[0]=0; ou
    url[0]='/0'; qui est préférable ,
    c'est la base du C, à tel point que personnellement je ne l'ai pas vu, tellement c'est considéré comme un réflexe.

    Le C admet url=0; mais dans ce cas on a un "pointer 0 assignment"!
    (si on l'utilise tel que , la donnée d'origine est perdu, si on a pas sauvé ce pointeur!)
    C'est autorisé pour la gestion dynamique de données avec un pointeur non alloué , on utilise alors le malloc() et free().
    C'est la force, la souplesse mais aussi la complexité du C et aussi le risque d'erreur.

    Ce sont des librairies public, chacun y allant de sa modif perso, parfois ça améliore et parfois ça empire, ou tout simplement ça change pour s'adapter aux habitudes du programmeur.

    Comme on dit souvent pour le net "le meilleur côtoie le pire".
    En un mot c'est la "jungle" !

  19. #18
    Atroverso

    Re : Pb compilation Arduino & libraries

    Bon, je viens de solutionner ce problème que je trainais depuis des mois en y allant à la bête et méchant:

    J'ai cherch un pack de librairie de l'IDe 1.8.5 que quelqu'un aurait bien voulu heberger sur GitHub et j'ai extrait tout d'abord la librairie Ethernet. Suite à quoi ca compilait jusqu'à me péter une erreur à propos de la librairie SI, que j'ai également extrait de l'archive et suite à ça plus de problème de compilation. J'ai envoyé le code sur une carte UNO et en la branchant, tout fonctionnait !

    Maintenant par curiosité je suis allé voir les librairie de plus près. Je n'ai rien trouvé de vraiment différent mais je ne suis jamais allé dans l'ancienne librairie SPI donc peut-être que le problème final était bien là-bas. Dans tous les cas j'ai maintenant un IDE 1.8.5 qui fonctionne parfaitement avec mon ancien programme (corrigé avec l'histoire d'url remise à zéero comme évoqué dans les premiers posts).


    Donc merci aux participants pour votre aide et vos réflexions à ce sujet, même si nous ne saurons jamais d'où venait exactement le problème :/

  20. #19
    Atroverso

    Re : Pb compilation Arduino & libraries

    Oups j'ai écrit un peu vite, je voulais dire la librairie "SPI" qui a posé ensuite problème.

Discussions similaires

  1. Arduino SPI.h et Sd2Card.cpp compilation
    Par invitee2f05bed dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 23/09/2015, 23h39
  2. erreur de compilation arduino
    Par invite7ade7f5a dans le forum Électronique
    Réponses: 3
    Dernier message: 15/01/2014, 19h26
  3. Communication arduino-arduino avec module Xbee
    Par inviteda9a8a4b dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 18h24
  4. Libraries et Models pour Proteus ISIS 7.6 ?
    Par invitea599998c dans le forum Électronique
    Réponses: 0
    Dernier message: 27/12/2009, 19h33
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...