Probleme de variable qui change toute seule

Bonsoir,

J’ai un phénomène étrange que je n’arrive pas à comprendre.

byte donne[3]={18,42,7};
int ana=0;
int value;
byte BP[8]={0,0,0,0,0,0,0,0};
void setup() {
 Serial.begin(9600); 
 delay(5000); 
 ana=donne[1]*16+donne[2];
 value=donne[0];
 for(int t=7;t>=0;t--){if(value>=pow(2,t)){BP[t+1]=1;value=value-pow(2,t);}else{BP[t+1]=0;}}
 //ana=donne[1]*16+donne[2];
 for(int t=1;t<8;t++){Serial.print(BP[t]);}
 Serial.print(" ");
 Serial.println(ana);
}
void loop() {
}

le résultat devrait affiché : 0100100 679 et j’ai 0100100 512 ???
La valeur ana change après (ou pendant) la ligne :
for(int t=7;t>=0;t--){if(value>=pow(2,t)){BP[t+1]=1;value=value-pow(2,t);}else{BP[t+1]=0;}}

Là j’avoue ne pas comprendre.

Si je fais : ana=donne[1]*16+donne[2]; après le for, la ça fonctionne…

Après d’autres essais la valeur ana ne prends que 4 valeurs différente au final : 0/256/512/768 si on modifie donne[1] et/ou donne[2]

Votre avis ?

Après de nouveaux essais : Ce phénomène apparait sur une UNO R4 Minima et UNO R4 Wifi mais pas sur une R3 standard…

Salut,

Il y a un problème de dépassement, non ?

for(int t=7; t>=0; t--){
   if(value>=pow(2,t)){
     BP[t+1]=1;
     value=value-pow(2,t);}
   else{
     BP[t+1]=0;
   }
}

Avec la boucle qui démarre avec t=7, tu vas chercher BP[7+1], soit BP[8].

Or tu as déclaré :

byte BP[8]={0,0,0,0,0,0,0,0};

Donc pour des indices entre 0 à 7…

C’était tout simple en fait et sous mes yeux…

Merci !

par contre comme indiqué après seules les cartes R4 font apparaitre le problème mais vus que c’est pas le même processeur, cela doit venir de ça.

Ce dépassement écrase une case mémoire plus ou moins critique selon l’architecture du micro sans doute.