Background: Sto scrivendo il codice C del microcontrollore per scrivere un file EBML. EBML è come un XML binario con elementi nidificati, ma al posto dei tag di inizio e fine, c'è un ID iniziale, la lunghezza e poi i dati. Sto scrivendo questo in Flash esterno in un'applicazione a bassa potenza, quindi mi piacerebbe mantenere gli accessi flash al minimo. Anche la memoria è limitata, perché niente è mai facile.
Quando posso mantenere l'intero elemento EBML in memoria, la sua generazione è facile perché posso tornare indietro e riempire la lunghezza di ogni elemento dopo aver saputo quale è la lunghezza. Il problema è cosa fare quando non riesco a tenere l'intero elemento in memoria. Le opzioni che vedo sono:
- Scrivi quello che so, quindi torna indietro e aggiungi le lunghezze (più semplice, ma aggiunge più accesso flash di quanto non lo desideri)
- Calcola la lunghezza di ciascun elemento prima di iniziare a scriverlo (relativamente facile, ma molto tempo per il processore)
- Cambia modalità una volta che la memoria si è riempita, in modo tale che io continui attraverso i dati, ma solo per calcolare le lunghezze per gli elementi già riservati in memoria. Quindi scrivi ciò che ho in memoria e torna indietro e continua a elaborare i dati da dove ho lasciato. (La mia opzione preferita finora)
- Fornisci agli elementi una lunghezza massima o peggiore dei casi quando devono essere scritti e la loro lunghezza finale non è ancora nota. (Più facile di quanto sopra, ma potrebbe ritorcersi contro e sprecare spazio)
Domanda: sembra che questo dovrebbe essere un problema relativamente comune a cui le persone hanno pensato. So che può succedere anche quando si formano alcuni pacchetti di dati. C'è una tecnica migliore / più comune / più accettata che mi manca qui? O solo alcuni termini per il problema che posso cercare?