Aggiornamento:
Ho creato il seguente programma per test per vedere se il programma gira tranquillamente per abbastanza tempo e sembra che funzioni perfettamente:
#include <MemoryFree.h>;
#define LED 13
String Counter;
int Contatore;
void setup() {
delay(10);
Serial.begin(115200);
Counter = "Cocco";
pinMode(LED, OUTPUT);
delay(100);
}
void loop() {
String Data = Counter;
if (Counter == "Cocco") {
Counter = "Ape";
} else {
Counter = "Cocco";
}
if (Contatore < 50) {
Contatore++;
} else {
Serial.print("Testo : ");
Serial.println(Data);
Serial.println("Memory Free : ");
Serial.println(freeMemory());
Contatore = 0;
digitalWrite(LED, !digitalRead(LED));
}
delay(10);
}
Il programma funziona come segue:
1.Scrivo nella variabile stringa Counter la parola "Cocco"
2.Trasferisco il messaggio di Counter a Data, Data è una Stringa temporanea.
3.Quando Counter è uguale a "Cocco" viene cambiata con "Ape"
4.E poi di nuovo a "Cocco"
5.Il ciclo si ripete ogni 10 millisecondi.
6.La variabile Contatore è incrementata di +1 ogni ciclo.
7.Quando raggiunge il valore 50 stampo su seriale il contenuto della varibile Data e quanta memoria ram ho disponibile.
8.Cambio lo stato del pin GPIO 13 ad ogni ciclo (ON,OFF - Toggle)
9.La variabile Contatore si resetta e il ciclo si ripete.
In pratica ogni 10 millisecondi vado a modificare sia la Stringa globale Counter sia la Stringa temporanea Data.
Vedo che la memoria disponibile, grazie alla librerira "MemoryFree.h" diminuisce quando inserisco la parola "Cocco" e diminuisce di 2 byte quando scrivo "Ape"
Non vedo diminuzione della memoria e ho lasciato l'Arduino UNO per un po' di minuti ma il lampeggio del led era sempre costante.
E' da tenere conto che la trasmissione dei dati sulle stringhe viene eseguita ogni 10 millisecondi un tempo abbastanza veloce per creare frammentazione e fare disastri, ma nulla di grave è successo...
Posso pensare che sia un caso? O è normale perché per logica non vado ad a creare mai nuove allocazioni? O comunque stringhe enormi?
Ho trovato altri link utili:
Taming Arduino Strings Avoiding Fragementation and Out-of-Memory Issues
Grazie ancora dell'aiuto! ![]()