Ich muss es vermeiden \n zu verwenden.
warum ?
trim()
ist die Antwort
aber du kannst es versuchen, keine '\n' nur '\r'
#include <SPIFFS.h>
const byte maxLines = 3;
String lineOut[maxLines];
String lineIn[maxLines];
void setup() {
Serial.begin(112500);
while (!Serial);
if (SPIFFS.begin()) {
Serial.println(F("SPIFFS mounted correctly."));
} else {
Serial.println(F("!An error occurred during SPIFFS mounting"));
}
// fill up with data
for (byte i = 0; i < maxLines; i++) {
lineOut[i] = "Data #";
lineOut[i] += i;
lineOut[i] += " = ";
lineOut[i] += random(0, 101);
}
// --- write ----
File file = SPIFFS.open("/test.txt", "w");
if (!file) {
Serial.println("Failed to open test file for writing");
while (true) yield();
} else {
for (byte i = 0; i < maxLines; i++) {
file.print(lineOut[i]);
file.write('\r');
}
file.close();
}
// --- read ----
file = SPIFFS.open("/test.txt", "r");
if (!file) {
Serial.println("Failed to open test file for reading");
while (true) yield();
} else {
for (byte i = 0; i < maxLines; i++)
if (file.available()) {
lineIn[i] = file.readStringUntil('\r');
lineIn[i].trim();
}
file.close();
}
// show results:
for (byte i = 0; i < maxLines; i++) {
Serial.print(lineOut[i]);
Serial.print("\t->\t");
Serial.println(lineIn[i]);
}
}
void loop() {}
Einfach nur
lastsbd0.trim();
lastdguv0.trim();
oder?
So, das Problem ist gelöst. Der ESP32 ist abgestürzt, da ich bei zwei verschiedenen Funktionen einen char buffer[11];
bzw. char buffer[64];
verwendet habe. Ich habe beide buffer versehentlich gleich genannt, sodass sich mein /r durch fehlende Absicherung in die zweite Funktion geschlichen und dort einen crash verursacht hat. Nun funktioniert alles wunderbar!
(Dies hat mir übrigens sehr geholfen!!! Vielen Dank.)
Aha, ja.....
Das bestätigt das einige meiner Grundannahmen zur Fehlersuche!
- der Fehler wohnt dort, wo man nicht hinschaut
- die zurückgehaltene Information ist die Wesentliche
- es wird nur das gezeigt, was selber schon mehrfach überprüft wurde
- der Weg in die Hölle ist mit falschen Annahmen gepflastert
- der Fehler findet sich dort, wo man zuletzt sucht
Ich danke dir für das Problem.
Mein ganzes Projekt mit tausenden Zeilen in diese kleine Box
zu quetschen empfand ich irgendwie unangemessen.
Hmm... könnte das über den Buffer hinausschreiben?
Und ich finde es irgendwie unangemessen, den defekten Teil geheim zu halten.
Egal, ob das jetzt mit Absicht gemacht wird, oder aus Versehen.
Wie auch immer..... es ist passiert ....
Natürlich!
Schreiben Sie deshalb eine MWE
Dagegen gibst du ja sizeof(buffer)
als Parameter mit. Da du dahinter noch ein Zeichen mehr schreibst ( 0 ), könnte das natürlich eins zuviel sein ...
Hallo,
na ja wenn buffer[11] in einer Funkiton deklariert wird und buffer[64] in der anderen, sind die ja zunächst mal lokal und haben nichts miteinander gemeinsam. Ob sie nun den gleichen Namen haben oder unterschiedliche Namen spielt da keine Rolle.
Dein Problem liegt vermutlich immer noch im Dunklen.
Heinz
Stimmt. Der Crash tritt auf, falls ich eine Datei einlesen will, welche gar nicht existiert. Aber das wiederum wenn eine andere Funktion aufgerufen wird, welche einen String zur Zeitberechnung zerlegen soll.
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.