Aber irgendwie macht die Funktion nicht was die soll. Ich bekomme
folgende ausgabe:
File Size: 0
Res write 20, 123 Bytes written
=========================================================
1140 ABCDEFGHIJK
=========================================================
File Size: 20
Res write 41, 115 Bytes written
=========================================================
10550 ABCDEFGHIJK
1140 ABCDEFGHIJK
=========================================================
File Size: 61
Res write 82, 115 Bytes written
=========================================================
20550 ABCDEFGHIJK
1140 ABCDEFGHIJK
10550 ABCDEFGHIJK
1140 ABCDEFGHIJK
Man sieh hier, dass beim zweiten Schreiben alles noch logisch erscheint,
beim dritten mal hat meiner Meinung nach 1140 ABCDEFGHIJK hinter der
20550 ABCDEFGHIJK Zeile nichts zu suchen.
Irgendwie stehe ich auf dem Schrumpfschlauch, oder die Erkältung macht
blöd. Sieht jemand den Fehler? Es ist egal, ob ich fputs oder fwrite
benutze, der Effekt ist gleich.
>> Irgendwie stehe ich auf dem Schrumpfschlauch, oder die Erkältung macht>> blöd.>Ich kann dir versichern, dass es nicht an der Erkältung liegt.
Häh?
>Wie oft willst du Zeilen in die Logfile schreiben und wie groß wird die>Datei bevor du sie zurück setzt bzw. ausließt & löschst?
Weiß ich nicht aus dem Kopf, auf jeden Fall ausreichend groß.
af schrieb:>>Wie oft willst du Zeilen in die Logfile schreiben und wie groß wird die>>Datei bevor du sie zurück setzt bzw. ausließt & löschst?> Weiß ich nicht aus dem Kopf, auf jeden Fall ausreichend groß.
Das Problem ist das laut Standard ja nur 10.000 Schreibzyklen garantiert
werden müssen und wenn du 2-3mal pro Sekunde was loggst (was zwecks
Puffergröße auch physisch geschrieben werden muss) kannst du dir
ausrechnen wie lange die Karten das mitmachen.
Für Bastler ein kalkulierbares Risiko... für Produkte die verkauft
werden wirds dann aber ernst.
>Das Problem ist das laut Standard ja nur 10.000 Schreibzyklen garantiert>werden müssen und wenn du 2-3mal pro Sekunde was loggst (was zwecks>Puffergröße auch physisch geschrieben werden muss) kannst du dir>ausrechnen wie lange die Karten das mitmachen.
Das ist so erst mal Unsinn. Die Karten haben einen
Mechanismus der Wear Levelling heisst. Wenn ein Sektor
häufiger beschrieben wird, wird er irgendwann automatisch
durch einen anderen ersetzt. Da musst du schon öfter
als ein mal pro Sekunde auf einen Sektor prügeln um zu Lebzeiten
zu erleben das die Karte einen Defekt hat.
>Ich möchte so eine Art logfile führen und würde unter FatFS gerne die>neusten Einträge an den Anfang der Datei einfügen.
Lass den Quatsch und häng immer hinten dran.
Du machst es dir nur unnötig schwer.
ZUm Problem
// write new data
res = f_write(&fsrc, write_buf, strlen(write_buf), &bw);
entweder du machst hier das File einmal zu und wieder auf, oder du gehst
mit einem ftell wieder zurück an den Fileanfang. Durch den
vorhergehenden f_read schreibst du an den bestehenden File-Inhalt hinten
drann
hier
printf("\r\nRes write %d, %d Bytes written", bw);
stimmt die Anzahl der Argumente nicht mit der Anzahl der %d überein.
Drumm stimmt deine Ausgabe nicht
> File Size: 0> Res write 20, 123 Bytes written
20 Bytes written
> =========================================================> 1140 ABCDEFGHIJK>> =========================================================> File Size: 20
daher auch FileSize 20. Passt
> Res write 41, 115 Bytes written
41 Bytes geschrieben
> =========================================================> 10550 ABCDEFGHIJK> 1140 ABCDEFGHIJK>> =========================================================> File Size: 61
also sollte die File Size hier auch 41 sein. Ist sie aber nicht. Die
File Size ist jetzt 20 (von vorher) PLUS die 41 von jetzt: 61
Allerdings hat holger nicht unrecht. Das ist ziemlicher Quatsch, weil du
eine Menge Speicher brauchst, nur damit du vorne anhängen kannst. Die
Alternative wäre mit 2 Files zu arbeiten.
>Lass den Quatsch und häng immer hinten dran.>Du machst es dir nur unnötig schwer.
Nö, bei Kontoauszügen ist mir egal wo vorne wo hinten ist, geht es darum
auf der Webseite was chronologisch anzuzeigen, gehören die neusten
Einträge nach oben.
>Ich würde fseek nehmen;)
Es geht zwar auch file_close/file_open, wie Karl Heinz sagt, aber fseek
ist in dem Fall eleganter. Danke, habe gar nicht bedacht, dass der
Pointer beim Wechseln zw. read/write nicht zurückgesetzt wird.