Circular Buffer [SOLVED]

Qualche giorna fo @gpb01 mi ha linkato un bel mini manuale/teoria su come usare in modo efficiente l'EEPROM.
Se qualcuno l ha letta potrebbe spiegarmi in che modo usando il buffer circolare raddoppio logicamente lo spazio da 100k di scritture a 200k?

be te lo dice qui

Having a system that regularly writes parameters to the EEPROM can wear out the
EEPROM, since it is only guaranteed to endure 100 k erase/write cycles. Writing the
parameters to a circular buffer in EEPROM where each of the elements in the buffer
can endure 100 k erase/write cycles can circumvent this

siccome l'eeprom è garantita solo per 100k scritture, usando la tecnica del circular buffer nello scrivere ottieni che ogni cella del buffer è scrivibile 100k volte...
questo funziona ovviamente anche utilizzando sempre la stessa cella per 100k volte e poi cambiando cella ma è tenere il conto che è problematico :slight_smile:

Triko93:
in che modo usando il buffer circolare raddoppio logicamente lo spazio da 100k di scritture a 200k?

E perché solo raddoppio? Se suddividi la memoria in N blocchi, hai 100k scritture per ogni blocco, quindi 100k*N

Io terrei nella prima cella il numero del blocco attivo, e in ogni blocco i dati e il numero di scritture del blocco stesso. Quando superano un tot diventa attivo il blocco successivo ecc.

Ok perfetto quindi è una memoria ssd potremo dire? Che utilizza delle celle che dopo diverse scritture iniziano a degradarsi.
Ora molto chiaro, utilizzero il circular buffer e di conseguenza avrò 100k*N ed N è 255 nella eeprom di arduino.
@Claudio_FF con blocchi intendi suddivisione a mio piacere delle 255 celle?

Triko93:
utilizzero il circular buffer e di conseguenza avrò 100k*N ed N è 255 nella eeprom di arduino. @Claudio_FF con blocchi intendi suddivisione a mio piacere delle 255 celle?

ArduinoUno ha 1024 celle, ciascuna scrivibile 100k volte.

Se devo salvare 4 byte dati più un contatore, diciamo da 1 byte, ogni blocco occupa 5byte.

Nella EEPROM ci stanno 1024/5=204 blocchi, quindi N=204, per un totale garantito di 20.4 milioni di salvataggi.

Claudio_FF:
ArduinoUno ha 1024 celle, ciascuna scrivibile 100k volte.

Se devo salvare 4 byte dati più un contatore, diciamo da 1 byte, ogni blocco occupa 5byte.

Nella EEPROM ci stanno 1024/5=204 blocchi, quindi N=204, per un totale garantito di 20.4 milioni di salvataggi.

Ok super clear now, ultima cosa, quando scrivo un int sulla EEPROM ad esempio un semplice 23, occupera' sempre 4 bytes oppure il compilatore capisce che occupa poco ed alloca solamente lo spazio necessario per contenerlo?

ogni cella della eeprom può contenere un byte quindi tu dovrai scrivere tanti byre quanti te ne servono per i tuoi dati e sei tu che devi dare l'indirizzo di inizio scrittura (e quindi anche sapere dove termina la scrittura per poter avere l'indirizzo successivo))

Patrick_M:
ogni cella della eeprom può contenere un byte quindi tu dovrai scrivere tanti byre quanti te ne servono per i tuoi dati e sei tu che devi dare l'indirizzo di inizio scrittura (e quindi anche sapere dove termina la scrittura per poter avere l'indirizzo successivo))

Si si avevo gia' letto tutto a riguardo non mi era chiara appunto questa cosa del raddoppio memoria che poi all effettivo sono 100k teorici per cella.
Bene grazie a tutti