Ma ciao ![]()
Ho una cosa stupidissima da fare che però non mi viene, ogni suggerimento sarà cosa gradita.
Sto ottimizzando il codice del mio web server e visto che spesso ho dei client.print ridondanti, volevo trovare il modo di archiviarli in memoria una volta sola e stamparli dove ne ho necessità.
Passiamo all'esempio pratico cosi ci capiamo meglio ![]()
Invio tre pagine html, ripetendo per tre volte l'invio dell'header http.
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println();
E' uno spreco di spazio inutile, quindi pensavo alla possibilità di creare una funzione di questo tipo:
PageHttpOk();
...
void PageHttpOk() {
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println();
Serial.println(F("Debug: funzione inviata"));
}
E richiamarla nel loop ogni qual volta ci fosse necessità di stampare un header.
Mi sembrava una cosa stupidissima e banalissima... ma non funziona!
Ponendo la chiamata della funzione nel loop e la funzione fuori dal loop... l'header non viene inviato!
So che la funzione viene correttamente chiamata perché a seriale leggo il debug, tuttavia è come se il client print non funzionasse.
Anche analizzando i pacchetti inviati tramite whireshark vedo chiaramente che il response header non viene inviato. La conseguenza è ovviamente una pagina html completamente rovinata.
Idee del perché accade ciò?
Il client non si inizializza correttamente se richiamato da una funzione esterna?
Suggerimenti per ovviare a ciò?
Con la libreria flash potrei creare una stringa
FLASH_STRING(PageHttpOk, " blablabla l'header ecc");
e fare un client print dove voglio tutte le volte che voglio.
PageHttpOk.print(client);
Ho già provato e funziona, tuttavia includere la libreria flash occupa più spazio di quanto ne vado a liberare ottimizzando il codice ![]()