ich baue gerade einen ESP8266 Datenlogger auf Basis des SPIFFS.
Eine Messung meines Sensors
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
benötigt 16 Bytes.
512 dieser structs werden in einem array im RAM akkumuliert.
1 |
|
Sobald das array voll ist, wird es in einer von 250 verschiedenen files im SPIFFS auf dem internen flash ROM abgelegt - das geschieht ca. alle 100-200min einmal. Anschließend können die nächsten Messungen im RAM aufgezeichnet werden können.
Gerade beschäftige ich mich aber mit dem Löschen dieser Dateien: Irgendwann möchte ich die Daten abholen und die ROM log komplett löschen.
Mein Ansatz ist, das "lazy" zu erledigen: ein Measurement gilt als leer, wenn die timestamp
1 |
|
abgelegt ist. Wenn also das erste Measurement einer SPIFFS-Datei diese timestamp enthält, ist der ganze Bereich frei und kann später komplett mit 512 neuen Messungen überschrieben werden.
Hier ist mein code für lazy delete:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
obwohl jede Datei NUM_MEASUREMENTS_IN_RAM * sizeof(Measurement) bytes groß ist schreibe ich also nur die ersten 16 Bytes - das geht deutlich schneller als eine Komplettformatierung.
Interessanterweise klappt das genau bei der ersten der 250 Dateien. Alle weiteren bleiben komplett unverändert - auch im ersten Measurement. Es ist als würde er irgendwo aus dem loop fliegen.
TLDR
Nun also meine Frage: ich habe 250 SPIFFS Dateien mit je einer Größe von 8kB. Wenn ich nun einige dieser Dateien öffne und jeweils 16 Bytes hineinschreibe und wieder schließe, hat das Auswirkungen auf die Struktur des Dateisystems? Verschieben sich beispielsweise die Addressen der nachfolgenden Dateien unerwartet oder habe ich in irgendeiner anderen Weise UB?