Fonctionnement de structures

Bonsoir a tous,
Voilà, j’utilise dans mon sketch des structure de ce type:

typedef struct
  { // pour test transmission
    byte Controle1;             // code le la séquence de 0 à 255 arbitraire actuellement une sequence de 3 trames sont envoyées contenant toutes les infos
    int tempo;                  // temporisation entre chaque envoi, sert pour message d'attente /perte de supervision(fréquence d'envoi
    bool trappe_levee;          // trappe ouverte ou fermee?  info de l'etat de la trappe
    byte heure ;                //   heure, courante , lever ou coucher du soleil suivant code sequence
    byte minutes ;              //    idem
    byte secondes;              //    idem
    float tension_batt;         //    tension batterie  on fait remonter l'info
    float tension_pv;           //    tension du PhotolVoltaique  idem
    byte alarme ;               //    Code de l'alarme locale (temperature, batterie, etc: 0 = RAS
    float Temperature;          // Temperature du ds3231
    byte Controle2;             //    code de controle de la séquence pas indispenssable permet avec un xor d'etre presque certain qe les infos sont ok

  } MaStructure;

je l'utilise pour envoyer via rf des infos
je m’étonne d'un truc,
j'ai un émetteur et un récepteur et tout vas bien
mais j'ai remarqué que lorsque je modifiais la structure coté émetteur (style je rajoute un champs, modifie le type etc..) , le récepteur continuais à utiliser les données reçues sans broncher.
comme j'ai mis un contrôle minimaliste je vire les trames qui ne m'interresse pas.

quand les structures ne concordent pas pourquoi ça ne plante pas?

j'ai même trouvé le moyen, a condition d'avoir le début de la structure identique de pouvoir envoyer /recevoir et surtout d'utiliser des structure tout a fait différentes

merci

Sans ton code on ne peut pas être précis.

Si ton receveur n'utilise que les 1ers champs de la struct, et que tu as changé les derniers champs, on comprends que ça continue à marcher...

M'enfin plutôt que de passer du temps à comprendre pourquoi ça marche alors que ça devrait pas, tu aurais meilleur compte de recompiler et ré-installer systématiquement tous les programmes qui utilisent cette struct à chaque modif de celle-ci.

oui je comprends biggil, mais j'essaye de comprendre..je trouve que c'est tres " permissif" ca a de bon cotés... et des pièges..

l'autre soir je me suis arraché les cheveux car mon code à un moment me donnait les meme valeurs
dans le bout de code ci dessous, suivant la valeur de "message.Controle1" on affecte les valeurs reçue à des champs adéquats

sauf que pour " Info_Poulettes.heure_lever, Info_Poulettes.minute_lever et Info_Poulettes.heure_coucher , Info_Poulettes.minute_coucher " j'avais TOUJOURS les mêmes valeurs..j'ai pensé pb coté émetteur ==> non..
coté réception c’était bon aussi on recevait bien les bonnes infos
mais lors du petit bout ci aprés j'avais oublié le "break" du case 1... et ca passait comme une lettre a la poste dans les années 50!! (plus maintenant.:frowning: ) je me suis vraiment cassé les pieds sur ce morceau...

 switch (message.Controle1)
  {

   

    case 0:
      Info_Poulettes.heure_courante = message.heure;
      Info_Poulettes.minute_courante = message. minutes;
      Info_Poulettes.seconde_courante = message.secondes;
      Info_Poulettes.alarme = message. alarme;
      Info_Poulettes.tension_batt = message.tension_batt;
      Info_Poulettes.tension_pv = message. tension_pv;

      //       Serial.print("Case 0 -");  Serial.println(message.Controle1);
      //      Serial.print(" heure courante :");Serial.print(Info_Poulettes.heure_courante);
      //       Serial.print(" -"); Serial.println(Info_Poulettes.minute_courante);
      //        Serial.print (" -   message.Controle1 ");   Serial.println(message.Controle1);

      break;

 case 1:
      Info_Poulettes.heure_lever = message. heure;
      Info_Poulettes.minute_lever = message. minutes ;
      Info_Poulettes.alarme = message. alarme;
      Info_Poulettes.tension_batt = message.tension_batt;
      Info_Poulettes.tension_pv = message. tension_pv;
      Info_Poulettes.Temperature= message.Temperature;          // Temperature du ds3231
      
      //            Serial.print("Case 1 -");  Serial.println(message.Controle1);
      //      Serial.print(" heure lever :");Serial.print(Info_Poulettes.heure_lever);
      //       Serial.print(" -"); Serial.println(Info_Poulettes.minute_lever);
      //        Serial.print (" -   message.Controle1 ");   Serial.println(message.Controle1);

 C'EST CELUI-LA que j'ai oublié!  ==>         break;


    case 2:
      Info_Poulettes.heure_coucher = message.heure;
      Info_Poulettes.minute_coucher = message.minutes;
      Info_Poulettes.alarme = message. alarme;
      Info_Poulettes.tension_batt = message.tension_batt;
      Info_Poulettes.tension_pv = message. tension_pv;
      //      Serial.print("Case  2 -");  Serial.println(message.Controle1);
      //     Serial.print(" heure coucher :");Serial.print(Info_Poulettes.heure_coucher);
      //       Serial.print(" -"); Serial.println(Info_Poulettes.minute_coucher);
      //        Serial.print (" -   message.Controle1 ");   Serial.println(message.Controle1);
      break;
    default:
      // if nothing else matches, do the default
      // default is optional
      break;
  }

mais bon... je m'amuse et j'essaye de savoir pourquoi ça marche.. ou ca ne marche pas!
Merci