Go Down

Topic: Circular Buffer [SOLVED] (Read 272 times) previous topic - next topic

Triko93

Oct 27, 2018, 10:41 pm Last Edit: Oct 28, 2018, 11:28 pm by Triko93
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?
If you find my replies useful please give me a +karma.
Stay Hungry, Stay Foolish

Patrick_M

#1
Oct 27, 2018, 11:44 pm Last Edit: Oct 27, 2018, 11:45 pm by Patrick_M
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 :)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Claudio_FF

#2
Oct 28, 2018, 11:06 am Last Edit: Oct 28, 2018, 11:20 am by Claudio_FF
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.
* * * *    'if' e 'case' non sono cicli   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *
* La corrente si misura in 'mA', la quantità di carica in 'mAh' *

Triko93

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?
If you find my replies useful please give me a +karma.
Stay Hungry, Stay Foolish

Claudio_FF

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.




* * * *    'if' e 'case' non sono cicli   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *
* La corrente si misura in 'mA', la quantità di carica in 'mAh' *

Triko93

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?
If you find my replies useful please give me a +karma.
Stay Hungry, Stay Foolish

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))
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Triko93

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
If you find my replies useful please give me a +karma.
Stay Hungry, Stay Foolish

Go Up