Bonjour à tous
Mon programme fonctionnant avec des String, pour être plus "conforme" aux règles c/c++, j'ai voulu le modifier avec des tableaux de caractères. Et là aie aie aie, ça plante après une égalité. J'essaie d'expliquer tout cela.
J'ai 3 tableaux:
Une commande permet de choisir A pour sélectionner le programme horaire à partir du SPIFFS ou B pour le sélectionner à partir du tableaux des programmes horaires déjà chargé en RAM:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 char mpec[10][8]; //10 manips de 0 à 9 8 char par manip (manip en cours) char pg[10][80]; //10 programmes horaire de 10 manips de 8 char char memLu[80]; //stockage manips d'un programme horaire enregistré en SPIFFS
Les manip d'un programme horaire sont chargées à la queue leuleu: 0 à 7, 8 à 15, jusqu'à 72 à 79.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 //***************chargement du programme en cours np[1]=Numéro de Programme********** void chargeProgEnCours(char* np){ // 3 P A/B P=programme A=lu en SPIFFS B=lu en RAM char fic[8]; sprintf(fic,"/P%c.txt%c",np[1],'\0'); //nom de fichier "/Px.txt" progEnCours=ci(np[1]); //conversion char en numeric ok=false; uint8_t i,j; if(!(progEnCours>=0 && progEnCours<10)){ afficErreurs(MSG9); } else{ if(np[2]=='A'){ //lecture SPIFFS 80 caractères lectureFichier(fic); for(i=0;i<10;i++){ for(j=0;j<8;j++){ //mpec = manip en cours mpec[i][j]= memLu[i*8 + j]; //0-7 8-15 16-23 ....72-79 charge 10 fois 8 octets dans mpec[0 a 9] } } for(i=0;i<80;i++){ pg[progEnCours][i] = memLu[i]; //plantage après i=79 } ok=true; } else if(np[2]=='B'){ //lecture RAM (80 caractères) for(i=0;i<10;i++){ for(j=0;j<8;j++){ mpec[i][j] = pg[progEnCours][i*8 + j]; //plantage après i=9 j=7 } } ok=true; } } }
Le plantage réinitialise l'ESP32.
Dans les deux cas c'est après avoir écrit ou lu la dernière case du tableau pg.
Une aide serait appréciable. Merci
Partager