Hallo,
ich habe je eine Frage zum Handling von SD-Karten und zu Strings.
Hintergrund ist der Bau eines Datenloggers auf Basis WEMOS Lolin ESP32 via Arduino IDE 1.8.8.
Es wird für die SD-Karte diese Lib verwendet: GitHub - nhatuan84/esp32-micro-sdcard
1.) Wenn man eh nur eine einzelne Datei auf der SD-Karte nutzt, die gelegentlich mit Meßdaten erweitert wird:
Macht es Sinn, innerhalb des Programms die Datei überhaupt zu schließen, hier über den Befehl myFile.close();
Es geht ja auch ohne schließen.
Oder gibt es da Seiteneffekte, die erst nach einiger Zeit auftreten ? Der Datenlogger soll Wochen bis Monate durchlaufen
Wenn auf das andauernde Öffnen und Schließen der Datei pro Zeile verzichtet wird, kann ich innerhalb von <10ms meine Daten (ca. 40byte) auf die Karte schreiben, sonst benötigt das Programm > 20ms.
Die Zeit ist hier relevant, um für das Wegschreiben auf SD-Karte den µC nur möglichst kurz zu blockieren.
2.) Derzeit bastele ich mir meine Daten zum Anzeigen via Strings zeilenweise zusammen, wie z.B.
Ausgabestring += Datum;
Ausgabestring += ',';
Ausgabestring += Zeit;
Ausgabestring += ',';
Ausgabestring += Datenstring1;
Ausgabestring += ',';
Ausgabestring += Datenstring2;
[...]
Jetzt lese ich häufiger die Warnungen generell Strings beim Arduino wg. der Speicherfragmentierung zu nutzen.
Da ich den Ausgabestring oben einmal pro Loopdurchlauf neu schreibe: Mülle ich mir auch damit mein RAM zu ?
Kann das evtl. durch eine lokale Variablendeklaration in Loop verhindert werden, oder macht das das nur schlimmer ?
Einerseits ist die Alternative Char-Arrays zu nutzen für mich einfach weniger intuitiv, andererseits soll der Logger lange laufen, ohne daß mir der Datenmüll den µC stoppt.
Bevor Kommentare kommen: Die Daten sollen nur rel. selten Blockweise (geschätzt 100 Zeilen à 40 Zeichen) nach einem externen Trigger auf SD-Karte geschrieben, es findet kein kontinuierliches Beschreiben der Karte statt.
Danke!
Tütenflieger