Forums
Come RISPARMIARE memoria Arduino - Printable Version

+- Forums (http://www.miupanel.com/forum)
+-- Forum: μPanel (http://www.miupanel.com/forum/forumdisplay.php?fid=1)
+--- Forum: ITA - Domande e discussioni sul sistema μPanel (http://www.miupanel.com/forum/forumdisplay.php?fid=13)
+--- Thread: Come RISPARMIARE memoria Arduino (/showthread.php?tid=243)



Come RISPARMIARE memoria Arduino - Technomaker - 10-31-2017

Ciao a tutti,
molti utenti hanno sviluppato un App µPanel a più schermate (quindi usando più volte l'istruzione "Serial.println("....") ) ma hanno notato un'occupazione di memoria molto elevata dello sketch Arduino. Ad alcuni, in fase di compilazione è anche comparso l'errore "memoria insufficiente".
A prima vista, si può pensare che le varie stringhe HTCML dei pannelli hanno saturato la memoria programma, ma in realtà quella che si è esaurita è la RAM.

Il motivo è che le stringhe di testo presenti le codice vengono sempre allocate in RAM, anche se sono dei semplici testi dentro una Serial.print() e, quindi, non ci sembrano associate a una variabile.  


SOLUZIONE

La soluzione è semplice, basta dire al compilatore che per tutte le stringhe di testo COSTANTI contenute nei vari Serial.print non vanno allocate in RAM.
Sostituite:

Code:
Serial.print ("....") >>>>>>>>>>  Serial.print (F("...."));

Serial.println("....") >>>>>>>>>>  Serial.println (F("...."));


Questo va fatto solo per i "Serial.print" che contengono stringhe di testo COSTANTI e non per i "Serial.print" che contengono variabili.

Con questa semplice accortezza, anche il più piccolo Arduino potra contentere decine di pannelli µPanel!


RE: Come RISPARMIARE memoria Arduino - CiccioArm - 11-14-2017

Ciao,
quindi per la definizione dei pannelli si può usare Serial.println (F("...."));
mentre per l'aggiornamento delle variabili all'interno dei pannelli Serial.println("....")

Esempio:
void setup()
Serial.println(F("$P:/L1G*15:0:Blinking;"));


void loop() {

delay(500); // Wait 0.5 s
Serial.println("#L11"); // Turn ON LED 1
......
}
ho capito bene?
Grazie


RE: Come RISPARMIARE memoria Arduino - Dok - 11-14-2017

No anche il
Serial.println("#L11");
lo puoi scrivere
Serial.println(F("#L11"));
in quanto non è una variabile.

In sostanza tutti i contenuti compresi tra le " " dei serial.print sono delle costanti e li puoi scrivere anteponendo la F (che sta per memoria FLASH) il resto no.