Bonjour,
Sur le code ci-dessous j'ai un problème bizarre
Pour le premier printf, ca affiche bien la variable, mais dans le deuxième
printf, ca n'affiche pas la variable, tous ce qui est avant %s ne s'affiche pas.
case State::UnknownCommand:
{
Terminal.printf("lastCmd: %s\r\n", lastCmd);
Terminal.printf("%s is not recognized as an internal command\r\n", lastCmd);
Terminal.print(F("or external, an executable program or a batch file.\r\n"));
state = State::Prompt;
}
break;
Pour le 2ème printf, ca commence par
is not recognized as an internal etc...
lasCmd est juste un tableau de caractères que j'ai rempli avant
case State::UnknownCommand:
Terminal.printf("%s is not recognized as an internal command\r\nor external, an executable program or a batch file.\r\n", lastCmd);
state = State::Prompt;
break;
J'ai trouvé la solution mais je ne saurais jamais pourquoi
Le code suivant fonctionne, sauf au lieu d'utilisé lastCmd, j'utilise l'argument passé en ligne de commande qui est stocké dans _argv.
Soit c'est un problème dans le case of ou le loop, car les tests se font dans le loop.
La variable lastCmd n'est jamais modifiée.
Apparemment elle se vide au 2ème printf, peut être un débordement mémoire.
case State::UnknownCommand:
Terminal.printf("\'%s\' is not recognized as an internal command\r\nor external, an executable program or a batch file.\r\n", _argv[0]);
state = State::Prompt;
break;
Il faudrait d'abord que les lecteurs de ta demande sachent que tu utilises FABGL, et qu'ils sachent également ce que représente cette variable Terminal.
J'ai exploré les sources de FABGL. Terminal est une classe qui hérite de Stream, donc de Print
La méthode Print::printf ESP32 est pauvrement équipée d'un buffer de 64 octets.
Je te conseillerais de limiter la taille des variables à afficher avec %s.
Oui c'est possible, il me semble que dans FABGL on peut modifier le buffer, je regarderai cela de plus près.
Mais dans mon cas la variable contenait 4 caractères e elle fonctionne bien ailleurs dans tous le programme.
Mais c'est possible que dans le printf, ce qui est entre guillemet dépasse le buffer.
Ca peut provenir aussi de l'ESP32.
Programme que tu ne publies que par bribes, ce qui empêche tout examen sérieux (classes, variables, portée de celles-ci). Difficile donc d'apporter une aide quelconque.
ah ok moi je parlais de la variable de printf de mon exemple, sinon oui il y a beaucoup de variables mais dans des fonction locales, en global j'en ai quelques unes 4 tableaux de 80 car. quelques booleens, des Enum etc ....
J'utilise des F() pour les printf, un peu de PSRAM.
Par contre pour utiliser FABGL, c'est sur sur que des Terminal.printf ou Terminal.println j'en ai une flopée.