Sfondo: sto scrivendo il codice C del microcontrollore per scrivere un file EBML. EBML è come un XML binario con elementi nidificati, ma invece di tag di inizio e fine, c'è un ID di inizio, lunghezza e quindi i dati. Sto scrivendo questo in Flash esterno in un'applicazione a bassa potenza, quindi vorrei limitare al minimo gli accessi al flash. Anche la memoria è limitata, perché nulla è mai facile.
Quando riesco a conservare l'intero elemento EBML in memoria, generarlo è semplice perché posso tornare indietro e riempire la lunghezza di ciascun elemento dopo aver saputo quale sia quella lunghezza. Il problema è cosa fare quando non riesco a trattenere l'intero elemento in memoria. Le opzioni che vedo sono:
- Scrivi quello che so, poi torna indietro e aggiungi le lunghezze (più semplice, ma aggiunge più accesso flash di quello che voglio)
- Calcola la lunghezza di ogni elemento prima di iniziare a scriverlo (relativamente semplice, ma molto tempo del processore)
- Cambia modalità una volta che la mia memoria si riempie, in modo che io continui attraverso i dati, ma solo per calcolare le lunghezze per gli elementi già riservati in memoria. Quindi scrivi quello che ho in memoria, torna indietro e continua a elaborare i dati da dove avevo interrotto. (La mia opzione preferita finora)
- Assegna agli elementi una lunghezza massima o peggiore 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 la gente ha 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?