Arduino Forum

International => Italiano => Software => Topic started by: Triko93 on Oct 27, 2018, 10:41 pm

Title: Circular Buffer [SOLVED]
Post by: Triko93 on Oct 27, 2018, 10:41 pm
Qualche giorna fo @gpb01 mi ha linkato un bel mini manuale/teoria (http://forum.arduino.cc/index.php?action=dlattach;topic=573991.0;attach=278165) 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?
Title: Re: Circular Buffer
Post by: Patrick_M on Oct 27, 2018, 11:44 pm
be te lo dice qui
Quote
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 :)
Title: Re: Circular Buffer
Post by: Claudio_FF on Oct 28, 2018, 11:06 am
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.
Title: Re: Circular Buffer
Post by: Triko93 on Oct 28, 2018, 11:26 am
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?
Title: Re: Circular Buffer
Post by: Claudio_FF on Oct 28, 2018, 11:46 am
Quote from: 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.




Title: Re: Circular Buffer
Post by: Triko93 on Oct 28, 2018, 10:15 pm
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?
Title: Re: Circular Buffer
Post by: Patrick_M on Oct 28, 2018, 10:50 pm
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))
Title: Re: Circular Buffer
Post by: Triko93 on Oct 28, 2018, 11:28 pm
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