[c] fflush in FlashFS geht nicht

miffi

Erfahrenes Mitglied
Hi zusammen.

Ich entwickle grad einen CAN-Bus-Logger auf einem STM32 (ARM Cortex-M3). Die CAN-Nachrichten sollen mittels des FlashFS (FS_CM3.lib) auf eine SD-Karte geschrieben werden. Hierbei kann ich nicht bei jedem Log einen fopen()/fclose() Zyklus durchlaufen, da die entsprechende State-Machine zu viel Performance frisst und in der zwischenzeit Nachrichten verloren gehen.
Daher führe ich lediglich einen fflush() durch, der laut API-Beschreibung die Daten persistent speichert, aber den File-Stream offen lässt:
Code:
// Parameter: void* buf, uint32_t bufItemSize, uint32_t bufItemCount, FILE* f
fwrite(buf, bufItemSize, bufItemCount, f);
fflush(f);
Die Daten werden aber eben nicht gespeichert. Als ich testhalber ein fclose() durchgeführt habe, wurden die Daten auf die Karte geschrieben, beim fflush() nicht, obwohl der Ok-Status zurückgegeben wird.
Kennt jemand dieses Problem? Oder weiß jemand, wo ich nach Lösungen suchen kann? Ich hab jetzt bald 3 Tage mit googlen verbracht und hab mindestens 5 neue graue Haare.

Gruß
miffi


//////edit
Hat sich erledigt. Ich bin über Umwege auf die Low-Level-Funktion des FlashFS gestoßen. Die fflush()-Funktion ist für den Typ "M" (Memory Card) nicht implementiert. Es wird zwar der Ok-Status 0 zurückgegeben, aber es werden keine Operationen am FAT32 durchgeführt. Schöner Mist ist das...
 
Zuletzt bearbeitet:
Hi saftmeister,

ich habs evtl. ein bisschen doof formuliert, bin sonst Host-Programmierer (Java, C) und noch recht neu in der Embedded-Welt.
Die Funktion fflush() ist in meiner KEIL-Umgebung über den Header stdio.h nicht auffindbar. Daher hat es ne Weile gedauert, bis ich über ein Suche über Dateiinhalte auf die Definition der Funktion des FlashFS gestoßen bin (__flushbuf(int handle) im Pfad "KEIL\ARM\RL\FlashFS\SRC\_fs_flushbuf.c"). Mit LowLevel meinte ich in dem Fall diese Funktion des FS, die auf den fflush()-call hin aufgerufen wird. Es geht natürlich noch weiter runter, da hier noch auf nicht zugängliche FAT-Funktionen zugeriffen wird.
 
Zurück