J'avais oublié le changement d'écran aussi :)
oui si vous avez changé le file system sous jacent et utilisez LittleFS ou SPIFF, il faut envoyer les requêtes correctes car vous n'adressez pas la même partition sinon
Version imprimable
J'avais oublié le changement d'écran aussi :)
oui si vous avez changé le file system sous jacent et utilisez LittleFS ou SPIFF, il faut envoyer les requêtes correctes car vous n'adressez pas la même partition sinon
merci Jay M
ok, je vais donc changer les appelsCitation:
oui si vous avez changé le file system sous jacent et utilisez LittleFS ou SPIFF, il faut envoyer les requêtes correctes car vous n'adressez pas la même partition sinon
J'aurais une dernière requête à savoir
j'ai toujours cette alerte à compilation
Que signifie svp ce message ?Code:
1
2
3 ....func.ino:1019:17: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] 1019 | print_define ("openw", 0);
je suppose que vous avez défini votre fonction print_define() comme
(ou quelque chose d'approchant)Code:
1
2
3 void print_define(char * s, int v) { ... }
vous dites alors au compilateur que les caractères pointés par le premier paramètre pourraient être modifiés par la fonction puisque pas constants.
Quand vous appelez print_define ("openw", 0);, le premier paramètre est une chaîne non modifiable (un const char *) ==> le compilateur vous dit que vous passez une chaîne non modifiable à une fonction qui voudrait peut être la modifier... donc il n'est pas content.
il faut déclarer la fonction comme cela
ainsi vous promettez de ne pas modifier la chaîne pointée par sCode:
1
2
3 void print_define(const char * s, int v) { ... }
Merci
j'ai pu corriger la fonction ' void print_define(const char * s, int v) {} '
et j'ai voulu appliquer le même démarche pour cette fonction là mais .....
voici la fonction :Code:
1
2
3
4
5
6
7
8 .....\func.ino: In function 'void scr_pack()': .... \func.ino:330:36: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] 330 | char *scr_name_tmp[scr_count] = {""}; //def ...\func.ino:334:19: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] 334 | scr_name[i] = ""; ../..
Code:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 /==================================================== // scr_pack() //=================================================== void scr_pack( ) { Serial.println(F("void scr_pack")); Serial.println(F("init scr")); char *scr_name_tmp[scr_count] = {""}; //def for (byte i = 0; i < scr_count; i++) { scr_name[i] = ""; scr_name_tmp[i] = ""; } #ifdef S0 scr_name[0] = "S0"; Serial.println(F("scr_name[0]=S0")); #endif #ifdef S1 scr_name[1] = "S1"; Serial.println(F("scr_name[1]=S1")); #endif #ifdef S2 scr_name[2] = "S2"; Serial.println(F("scr_name[2]=S2")); #endif #ifdef S3 #ifndef tft2_S3 scr_name[3] = "S3"; Serial.println(F("scr_name[3]=S3")); #endif #endif #ifdef S4 #ifndef tft2_S4 scr_name[4] = "S4"; Serial.println(F("scr_name[4]=S4")); #endif #endif #ifdef S5 scr_name[5] = "S5"; Serial.println(F("scr_name[5]=S5")); #endif #if defined (pin_sd) && defined (Sf) scr_name[6] = "Sf"; Serial.println(F("scr_name[6]=Sf")); #endif #ifdef Sg #ifndef tft2_Sg scr_name[7] = "Sg"; Serial.println(F("scr_name[7]=Sg")); #endif #endif #ifdef Sn //last scr_name[9] = "Sn"; Serial.println(F("scr_name[9]=Sn")); #endif byte i_in = 0; for (byte i = 0; i < scr_count; i++) { #ifdef debug Serial.print(F("scr_name==")); Serial.println(scr_name[i]); Serial.print(F(" i=")); Serial.println(i); #endif if (scr_name[i] != "") { //Serial.println("ADD"); scr_name_tmp[i_in] = scr_name[i]; i_in++; scr_count_pack = i_in; } scr_name[i] = ""; } #ifdef debug Serial.print("scr_count_pack="); Serial.println(scr_count_pack); #endif for (byte i = 0; i < scr_count; i++) { scr_name[i] = scr_name_tmp[i]; Serial.print("SCR["); Serial.print(i); Serial.print("]="); Serial.println(scr_name[i]); } }
quand vous faites ça
vous essayez de mettre le pointeur vers une chaine de caractère constants (le "") dans un pointeur qui dit que le contenu peut varier.Code:char *scr_name_tmp[scr_count] = {""}; //def
il faut mettre
attention rien n'interdirait au compilateur de mettre la chaîne "S1" (c'est une variable locale à votre fonction) sur la pile et donc le pointeur que vous obtenez ne sera plus valable à la sortie de la fonction (souvent les chaînes constantes sont en mémoire flash suivant l'arduino donc ça fonctionnera)Code:const char *scr_name_tmp[scr_count] = {""}; //def
mille mercis Jay M
je l'avais fait au départCitation:
vous essayez de mettre le pointeur vers une chaine de caractère constants (le "") dans un pointeur qui dit que le contenu peut varier.
mais j'avais oublié de la faire làCode:const char *scr_name[scr_count] = {""};
et çà plantait à la compilation lors de la comparaison (logique) :Citation:
const char *scr_name_tmp[scr_count] = {""}; //def
maintenant çà marche mieux ;)Code:
1
2 scr_name_tmp[i_in] = scr_name[i];
Oui
Attention cela dit à la comparaison de pointeurs pour comparer leur contenu
Ça ne fonctionne que si les chaînes sont allouées globalement par le compilateur et jamais libérées
Le plus propre serait d’avoir un tableau global de ces chaînes et un enum dans le même ordre
Dans le code vous utilisez l’énumération pour représenter l’état et s’il y a besoin d’imprimer le texte vous allez le chercher dans le tableau global à l’index de l’énum.
Dans le code il suffit d’un byte pour représenter la valeur et tester (c’est plus rapide)Code:
1
2
3 const char * const lesTextes[] = {"v1", "v2", "v3"}; enum : byte {v1, v2, v3};
Et l’impression du texte associé c’est simplementCode:
1
2
3
4 byte v = v2; if (v == v3)
Code:Serial.println(lesTextes[v]);
Ok merci bien Jay M
pour l'info