Un "for" fait exploser le besoin mémoire?

Bonjour,
J'ecris ce code dans une classe et char buff poinr sur un Msg[0 à 600]
Mes lignes sont une succession de sprintf_P destinées à contenir l'en tête du code Json.

Bonjour,
J’ecris ce code dans une classe et char Buff pointe sur un tableau de char Msg[600]
Mes lignes sont une succession de sprintf_P destinées à contenir l’en tête du code Json.
Et en ajoutant une sous routine d’extraction , le prog se met à excéder la taille RAM d’un UNO (c’est ballot)
(Tout n’est pas nickel j’ai un peu bricolé)

void Datas::ExportColJson(char *Buff){
    //Inspiration
    //https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/Camera/CameraWebServer/app_httpd.cpp
    //this->NvFocus(false);
    //EffaceMsg();  
   
    *Buff++ = '{';
    Buff +=sprintf_P(Buff, PSTR("\"cmd\": \"AJ_Col\", \"sht\": \"P%c\","), this->Point); // Comande&Nom
    Buff +=sprintf_P(Buff, PSTR("\"col\": \"%c\","),this->CodeCol);
    Buff +=sprintf_P(Buff, PSTR("\"val\": \""), 18);  
    switch (Nb_Bit){
      case 4:
        float *p4 = (float*) pB; 
        //for (byte i = 0; i < 30 ; i+=2) {
          int Dp = (int)*p4;
          int Pd = (int)(*p4++*100)%100;
         
          Buff +=sprintf_P(Buff, PSTR("%d"), Dp);// "Valeurs"
          //Buff +=sprintf_P(Buff, PSTR("%d"), Dp);
          //Buff +=sprintf_P(Buff, PSTR( ".%02d,"), Pd);*p4++;
          };//break;   
    //} 
    
    *Buff++ = '}';*Buff++ = '0';
}

Mais l’effet de l’introduction du select case ou du for est identique: on passe de 51% à 119% de RAM!!!

Le prog est en test sur uno et doit aller sur ESP8266, il y aura de la place, mais la je prend 2Ko en RAM sur une ligne ca me chagrine.
Es ce un phénomène connu? Avez vous des parades? Je comprends pas trop car il me semblait qu’n pointeur ne représentait que la taille de son adresse?!

Merci

Non, en fait c’est ceci qui met le souc:

float *p4 = (float*) pB;
    int Pe = (int)*p4;
    Buff +=sprintf_P(Buff, PSTR("%d"), Pe);

*p4 est un pointeur de float
int Pe est la Partie entière du float

La dernière ligne ne pose habituellement pas de problèmes par des appels quasi similaires…

Ton code semble compliqué. Es-tu sûr qu'il ne manque pas un format (genre %d) dans cette ligne :

Buff +=sprintf_P(Buff, PSTR("\"val\": \""), 18);

D'une manière générale, es-tu sûr que tes lignes font bien ce que tu attends ?

Buff +=sprintf_P(Buff, ...

Le sprintf doit écrire dans le buffer Buff mais au début je pense. Donc ça doit écraser à chaque fois ce qui a été fait Il serait plus simple de faire une seul sprintf, en l'écrivant sur plusieurs lignes au besoin pour une meilleure lisibilité :

Buff = sprintf_P ("{\"cmd\": \"AJ_Col\", \"sht\": \"P%c\",
\"col\": \"%c\",
\"val\": %d\"", this->Point, this->CodeCol, 18);

Edit : réponse écrite avant de voir ton message suivant...

Avec ceci plus de soucis, mais cela ne m'avance pas vraiment...

float *p4 = (float*) pB;
    int Pe = (int)*p4;
    int A;
    Buff +=sprintf_P(Buff, PSTR("%d"), A);

lesept:
Ton code semble compliqué. Es-tu sûr qu'il ne manque pas un format (genre %d) dans cette ligne :

Buff +=sprintf_P(Buff, PSTR("\"val\": \""), 18);

D'une manière générale, es-tu sûr que tes lignes font bien ce que tu attends ?

Buff +=sprintf_P(Buff, ...

Le sprintf doit écrire dans le buffer Buff mais au début je pense. Donc ça doit écraser à chaque fois ce qui a été fait Il serait plus simple de faire une seul sprintf, en l'écrivant sur plusieurs lignes au besoin pour une meilleure lisibilité :

Buff = sprintf_P ("{\"cmd\": \"AJ_Col\", \"sht\": \"P%c\",

"col": "%c",
"val": %d"", this->Point, this->CodeCol, 18);



*Edit : réponse écrite avant de voir ton message suivant...*

Pour le 1er point : oui c'est pas bien écrit, mais cette facon me plais (je trouverai une bidouille)
Car 2, non cela écrit bien à la suite! Buff reçoit et le résultat et s'incrémente du nombre de carractères!
Merci pour ta réponse. => je vire cette ligne foireuse pour vérifier par précaution.

Pas mieux du point de vue du problème.

Pour le résultats des 4 lignes ci dessous:

void Datas::ExportColJson(char *Buff){
    //Inspiration
    //https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/Camera/CameraWebServer/app_httpd.cpp
    //this->NvFocus(false);
    //EffaceMsg();  
    this->Point = '1';
    *Buff++ = '{';
    Buff +=sprintf_P(Buff, PSTR("\"cmd\": \"AJ_Col\", \"sht\": \"P%c\","), this->Point); // Comande&Nom
    Buff +=sprintf_P(Buff, PSTR("\"col\": \"%c\","),this->CodeCol);
    Buff +=sprintf_P(Buff, PSTR("\"val\": \""));
{"cmd": "AJ_Col", "sht": "P1","col": "A","val": "

Traduire Ajout en colonne A sur feuille P1 des valeurs à suivre...