Su arduino sono presenti 2 tipi di memorie persistenti a quanto mi pare di aver capito :), flash, per il programma ed eeprom per, eventuali, dati da conservare.
La eeprom a un tot cicli di scrittura/lettura e poi non è più utilizzabile.
Le mie domande sono:
Anche la flash ha gli stessi limiti della eeprom?
C'è qualche modo di mettere i dati nella flash ovviamente nello spazio libero lasciato dal programma, se ce ne è?
erpomata:
Le mie domande sono:
Anche la flash ha gli stessi limiti della eeprom?
Non solo ci sono gli stessi limiti, ma sono pure molto più pesanti, circa 10.000 riscritture per la flash contro le circa 100.000 della EEPROM
C'è qualche modo di mettere i dati nella flash ovviamente nello spazio libero lasciato dal programma, se ce ne è?
Si tramite progmem, in alcuni casi la cosa avviene in automatico, p.e. se fai "Serial.print("sono una stringa") l'array "sono una stringa" viene posto nell'area della memoria flash durante la fase di compilazione.
Nella flash tramite progmem puoi scrivere solo valori costanti.
Nell'IDE dalla versione 1.x e sucessive puoi usare la funzione F()per risparmiare il passaggio in RAM.
Così:
Serial.print("sono una stringa");
diventa
Serial.print(F("sono una stringa"));
Con la funzione F() le costanti vengono pescate dalla flash ed elaborate senza passare dalla RAM.
Non è possibile scrivere dati sulla flash a run-time (c'è un altro topic sull'argomento) se non durante l'esecuzione del bootloader. (la discussione era proprio su questo fatto).