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
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 appelsoui 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part const char *scr_name_tmp[scr_count] = {""}; //def
mille mercis Jay M
je l'avais fait au départvous 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 : Sélectionner tout - Visualiser dans une fenêtre à part const char *scr_name[scr_count] = {""};
et çà plantait à la compilation lors de la comparaison (logique) :const char *scr_name_tmp[scr_count] = {""}; //def
maintenant çà marche mieux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 const char * const lesTextes[] = {"v1", "v2", "v3"}; enum : byte {v1, v2, v3};
Et l’impression du texte associé c’est simplement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 byte v = v2; if (v == v3)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Serial.println(lesTextes[v]);
Ok merci bien Jay M
pour l'info
Partager