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:
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...
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);
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: