Hallo Leute, ich versuche gerade bei einem meiner Projekte ein Logfile auf einer SD-Karte zu implementieren. Alles läuft auf einem Arduino Pro Mini 3,3V (ATmega328) und für einen größeren Controller ist leider kein Platz. Ich kann leider nicht die Standard SD-Library verwenden, da nicht mehr viel Flash-Speicher zur Verfügung steht. Ich habe diese PetitFS Library gefunden: http://elm-chan.org/fsw/ff/00index_p.html Hiermit schaffe ich es Daten von der SD-Karte zu lesen und habe auch schon etwas auf die SD geschrieben. Allerdings schaffe ich es nicht Zeile für Zeile in ein File zu schreiben. Bei jedem Log-Eintrag soll einfach eine neue Zeile im File geschrieben werden. Kennt sich jemand bei dieser Library aus und kann mir helfen? Ist es hiermit eigentlich möglich? Falls nicht. Kennt jemand eine Library mit der das möglich ist, welche aber möglichst wenig Speicher am Controller benötigt? Danke für eure Antworten
Daniel E. schrieb: > Danke für eure Antworten Schreib doch mal was du bisher versucht hast und nicht klappt.
Daniel E. schrieb: > Danke für eure Antworten Wenn ich mir genau diese Seite durchlese http://elm-chan.org/fsw/ff/pf/write.html bleibt eigentlich kein Wunsch offen. Es ist klar und deutlich beschrieben in welcher Abfolge was zu tun ist und welche Funktionsaufrufe welche Parameter benötigen. Dass vielleicht vorher irgendwann mal pf_mount - Mount a Volume pf_open - Open a File aufgerufen sein muss dürfte sich aus dem Zusammenhang der Benutzung eines Filesystems ergeben bzw aus den Fehlercodes die bei pf_write auftreten können.
Ich habe das Beispiel der Library verändert, um ins File zu schreiben, allerdings wird jedes Mal das vorhandene im File überschrieben. Ich verstehe nicht ganz, wie ich in die erste freie Zeile springen kann, um das Vorhandene nicht zu überschreiben.
1 | // Petit FS test.
|
2 | // For minimum flash use edit pffconfig.h and only enable
|
3 | // _USE_READ and either _FS_FAT16 or _FS_FAT32
|
4 | |
5 | #include "PetitFS.h" |
6 | #include "PetitSerial.h" |
7 | |
8 | PetitSerial PS; |
9 | // Use PetitSerial instead of Serial.
|
10 | #define Serial PS
|
11 | |
12 | // The SD chip select pin is currently defined as 10
|
13 | // in pffArduino.h. Edit pffArduino.h to change the CS pin.
|
14 | |
15 | FATFS fs; /* File system object */ |
16 | //------------------------------------------------------------------------------
|
17 | void errorHalt(char* msg) { |
18 | Serial.print("Error: "); |
19 | Serial.println(msg); |
20 | while(1); |
21 | }
|
22 | //------------------------------------------------------------------------------
|
23 | void test() { |
24 | uint8_t buf[32]; |
25 | |
26 | // Initialize SD and file system.
|
27 | if (pf_mount(&fs)) errorHalt("pf_mount"); |
28 | |
29 | // Open test file.
|
30 | if (pf_open("TEST.TXT")) errorHalt("pf_open"); |
31 | |
32 | UINT nr; |
33 | pf_write("Hallo",sizeof("Test"),&nr); |
34 | |
35 | // Dump test file to Serial.
|
36 | /*while (1) {
|
37 | if (pf_read(buf, sizeof(buf), &nr)) errorHalt("pf_read");
|
38 | if (nr == 0) break;
|
39 | Serial.write(buf, nr);
|
40 | }*/
|
41 | }
|
42 | //------------------------------------------------------------------------------
|
43 | void setup() { |
44 | Serial.begin(9600); |
45 | test(); |
46 | Serial.println("\nDone!"); |
47 | }
|
48 | void loop() {} |
Daniel E. schrieb: > Ich verstehe nicht ganz, wie ich in die erste freie Zeile springen kann, > um das Vorhandene nicht zu überschreiben. Du hast Dir die Restriktionen von pf_write durchgelesen und sie auch verstanden? http://elm-chan.org/fsw/ff/pf/write.html The write function has some restrictions listed below: Cannot create file. Only existing file can be written. Cannot expand file size. Cannot update time stamp of the file. Write operation can start/stop on the sector boundary only. Read-only attribute of the file cannot block write operation.
Ok das habe ich leider übersehen. Kennt jemand eine kleine Library, um ein Logfile auf einer SD-Karte zu erstellen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.