Domanda a chi ha usato questa libreria.
Esiste un limite (un buffer) nei dati che posso scrivere in un'unica volta prima di saturare/bloccare la libreria?
Mi spiego, devo riversare il contenuto di una EEPROM I2C in un file di testo su una uSD.
La memoria conterrà fino a più di 60 kB di dati ma, in fase di scrittura sul file, cresceranno perché verranno riconvertiti in qualcosa di più "umano". Aperto il file, posso scriverci dentro fino alla fine dei dati oppure devo ogni fanto fare un flush? Cioè, la libreria ha un buffer che svuota in automatico oppure ogni operazione di scrittura (write) viene eseguita immediatamente?
devi vedere la libreria come è fatta, se non ricordo male la write è bloccante, come per la serial: finchè non ha finito di scrivere rimani "bloccato" nella scrittura.
Sì ma dico, posso mandargli quanti dati voglio oppure ha un buffer che si riempie e poi perdo dati? Oppure fa il flush in automatico sul file aperto via via che riceve i dati?
Mica posso far fare 60.000 apri/chiudi sul file... finirei il giorno dopo a fare il dump dei dati dalla EEPROM.. ![]()
no, non possiede buffer interno, se gli passi un array di dati da scrivere QUELL'ARRAY è il suo buffer. Che poi parlare di buffer è erroneo, perchè il buffer è una copia in modo che se modifichi l'array non modifichi il dato scritto.
Quì il problema della modifica contemporanea non ce l'hai perchè rimani bloccato nella write (salvo interrupt)
ps. aprire e chiudere un file è un'operazione lenta, ma non credo incida sul disco. e comunque in un'apertura di file puoi eseguire infinite scritture e letture.
leo72:
Sì ma dico, posso mandargli quanti dati voglio oppure ha un buffer che si riempie e poi perdo dati? Oppure fa il flush in automatico sul file aperto via via che riceve i dati?
Mi pare ovvio che ci sia un buffer, e sicuramente è di 512 byte, la dimensione del blocco di trasferimento delle SD.
Mica posso far fare 60.000 apri/chiudi sul file... finirei il giorno dopo a fare il dump dei dati dalla EEPROM..
Il file lo apri una volta, scrivi tutto quello che ci devi mettere, non ha importanza se viene fatto per blocchi di 512 byte per volta, e poi lo chiudi.
Del resto devi pure fare i conti con la RAM del ATmega, più di tanto non puoi metterci sopra e questo ti obbliga a trattare i dati in piccoli blocchi per volta.
Perfetto, era quello che volevo sapere, e cioè che il flush viene gestito dalla libreria e quindi man mano che riceve i dati, questa li riversa sul file. Grazie. Metto RISOLTO.
lesto:
Che poi parlare di buffer è erroneo, perchè il buffer è una copia in modo che se modifichi l'array non modifichi il dato scritto.
Non è la corretta definizione di buffer, o meglio è troppo restrittiva, un buffer è una memoria temporanea che può avere svariati usi, si va da quello come zona di transito tra due device diversi, e con diverse velocità, a quello come zona dove eseguire elaborazioni su dei dati prima dell'utilizzo finale senza alterare i valori originali.