[resolu]variable static qui se réinitialise toute seule...

bonjour à tous

alors voila, tout est dit dans le titre... j'ai une variable dans une fonction appelée à chaque passage dans loop(). Au bout de quelques tours de boucle, elle se remet à 0.

j'ai essayé de la remplacer par une variable globale, même comportement

à 3h du mat j'ai laissé tomber, là je m'y reprends la tête... sans plus de succés

dépassement de ram ? de pile ? si c'est ça, comment le voir ?

void menu_start()
{
 	 	char machin;
 	 	static char truc;
	
	if (menu.isFirstRun()) lcd.clear();
 	
 	lcd.setCursor(0,3);
 

 	if(counter) { //machin=encoderCount(); 
 		machin=counter;
 		//truc+=counter;
 		//counter=0;
 		Serial.println(" ");
 		Serial.print("counter ");Serial.print(counter,DEC);Serial.print(" machin ");
 		Serial.print(machin,DEC);Serial.print(" truc ");Serial.print(truc,DEC); 
 		truc+=machin;
 		Serial.print(" truc+=machin ");Serial.print(truc,DEC);Serial.print(" read ");
 		Serial.println(encoderCount(),DEC);
 		
 		lcd.print(truc,DEC); lcd.print(" "); lcd.print(machin,DEC);
 	}
 	Serial.print(truc,DEC);
 	
	if(menu.periodic(1E3)) {
		//lcd.clear();
		lcd.setCursor(0,0);
		lcd.print(RTC.getS(DS1307_STR_FULL,false));
		lcd.setCursor(0,1);
		lcd.print(T[0],1); lcd.print(" ");
		lcd.print(T[1],1); lcd.print(" ");
		lcd.print(T[2],1); lcd.print(" ");
		//lcd.print(T[3],1); lcd.print(" ");
	}
	if(btn.state(BTN_CLICK)) {
		lcd.clear();
		lcd.setCursor(0,2);
		lcd.print(encoderCount(),DEC);
	}	
	if(btn.state(BTN_LONGCLICK)) {
		menu.next(menu_param);
		//lcd.clear();
	}
}

voila ce qui sort de ça dans le moniteur série :

0000000000000000000000000000000000000000000000000 
counter -1 machin -1 truc 0 truc+=machin -1 read -1
-1-1-1-1-1-1-1-1-1 
counter -1 machin -1 truc -1 truc+=machin -2 read -1
-2-2-2-2-2-2-2-2 
counter 1 machin 1 truc -2 truc+=machin -1 read 1
-1-1-100000000000 
counter 1 machin 1 truc 0 truc+=machin 1 read 1
11111111111111111111111111111111111111 
counter -1 machin -1 truc 1 truc+=machin 0 read -1
0000 
counter -1 machin -1 truc 0 truc+=machin -1 read -1
-1-1000000 
counter 1 machin 1 truc 0 truc+=machin 1 read 1
11111111 
counter 1 machin 1 truc 1 truc+=machin 2 read 1
2222222 
counter 1 machin 1 truc 2 truc+=machin 3 read 1
333333333300000000000000000000000000000000000 
counter 1 machin 1 truc 0 truc+=machin 1 read 1
11111 
counter 1 machin 1 truc 1 truc+=machin 2 read 1
2222222222200

la variable concernée par le soucis c'est "truc". les variables sont des char pour économiser de la ram, mais j'avais changé par des int pour voir, même comportement. J'ai essayé de déclarer truc en global, pareil.
je ne sais plus quoi faire

le programme complet en pièce jointe

regul.zip (3.13 KB)

Bonjour,

Souvent ce genre de problème est du a une variable (tableau) qui déborde sur une autre.

Il y a quelque chose qui m'interpelle dans tes déclarations:

float T[SENSOR_NBR-1];
float Offset[SENSOR_NBR-1];

Pourquoi ce -1 ?
Le nombre d'éléments des tableaux devrait être le nombre de capteurs:

float T[SENSOR_NBR];
float Offset[SENSOR_NBR];

...................... !

pourquoi -1 ?
.......
.....
...
..
.

ben parceque je suis un ENORME c****d, peut-être ?

je crois que j'ai du me dire un truc débile du genre que comme l'index d'un tableau démarrait à 0 au lieu de 1 ben j'ai enlevé 1 dans ma déclaration... voila voila....

bref, problème résolu, en effet c'était bien ça.

un ENORME MERCI !!!!!!

par contre pourquoi rien d'autre n'est parti en c****** avant ? mystère.

bricofoy:
je crois que j'ai du me dire un truc débile du genre que comme l'index d'un tableau démarrait à 0 au lieu de 1 ben j'ai enlevé 1 dans ma déclaration... voila voila....

La confusion doit venir du fait que à la déclaration, si tu veux 4 objets dans ton tableau, il faut le déclarer un tableau de 5 objet pour pas oublier le caractère de terminaison

ben même pas, c'est pas des chaines de caractères mes tableaux, y'a pas de terminaison !