Problème décodage trame ou liste chainée





  • Bonjour Charles,

    j'utilise la librairie Téléinfo avec un ESP8266 sur une carte Wemos.
    Parfois, la valeur du pointeur contient aussi l'étiquette suivante ou une autre . Par exemple je lis la valeur de HCHP avec me->value et j'obtiens "005855964AXAPP"

    void DataCallback(ValueList * me, uint8_t  flags)
    {
       if (me->name=="HCHP"){
          Serial.println(me->value); 
      }
    }
    

    Mon code fait plein d'autres choses, notamment des mesures de courant.
    J'ai l'impression que ces mesures perturbent les interruptions nécessaires au fonctionnement de la librairie; Pourtant j'essaye d'aller le plus vite possible!

    Une idée? Je vais voir si je peux utiliser l'entrée série" normale" pour l'entrée Téléinfo, mais ça m’embête un peu, bien que je me serve de l'OTA.

    Merci
    Pierre



  • Pierre,

    C'est du language C me->name est un pointeur sur sur une chaine char * tu ne peux pas faire un ==, d'ailleurs le compilateur à du lever un warning sur le sujet non?

    Ton code doit être du genre

    if (strncmp(me->name, "HCHP",4) == 0 ) {
    
    }
    


  • @admin merci pour la réponse.

    j'ai bien compris que c'est un pointeur, et j'ai écrit le code uniquement pour la question, et ce n'est pas vraiment ce que je fais dans mon programme , désolé!!
    je fais :

    String Nom = me->name;
    char *Valeur = me->value);
    if (Nom =="PAPP") Serial.println (Valeur);
    

    et j'ai le pb mentionné de façon aléatoire au bout de 24 h ou parfois plus.

    Pour contourner le pb, j'ai modifié par :

    long Valeur = atol(me->value);
    

    et la fonction atol(), bien que d'utilisation non conseillée, supprime les caractères qui ne sont pas des chiffres à la fin.

    Mais depuis que je suis passé sur l'entrée série "normale" pour la téléinfo, je n'ai plus le pb!

    Je pense que le traitement des interruptions était perturbé par d'autres parties de mon programme ou l'inverse?

    Pierre



  • Oui possible tout dépend de ce que fait le programme et la version de la stack IP et si tu utilises la vraie serie ou le software serial (que je déconseille)


Log in to reply