INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
LittleFS Open, seekSet und Write / Read tut nicht, was es soll
23.11.2020, 13:59
Beitrag #1
LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Hallo,

ich habe früher schon mit SPIFFs hantiert und in Dateien geschrieben. Habe dort nicht festgestellt, dass es nicht funktionieren würde. Jetzt nutze ich LittleFS und staune, dass ich Probleme habe.

Datei schreiben mit Mode "w" funktioniert. Mode "w+" funktioniert auch. Datei lesen Mode "r" funktioniert auch. Folgendes funktioniert aber irgendwie nicht:

Datei öffnen Mode "r+"
Datei schreiben
Datei schließen

Datei öffnen Mode "r"
Datei lesen
Datei schließen

Wenn ich die Datei beschreiben will, öffne ich die mit "r+" und positioniere den Zeiger mit seekSet (vom Anfang der Datei), um dann mit write() zu schreiben.
Beim Lesen mache ich dasselbe nur mit "r" und read().

Beim Lesen bekomme ich nicht die Daten zurück, die ich geschrieben habe.

Zur Kontrolle habe ich den Zeiger in der Datei ausgelesen:
Vor dem Schreiben an Position 64 bspw. Dann 30 Bytes schreiben, Position ist nun: 94. - Ist richtig.
Vor dem Lesen an Position 64. Dann 32 Bytes lesen, Position ist nun: 96. - Ist richtig.
Aber die Daten sind nicht dieselben.

Ich habe das mit "Serial.print" ausgegeben, hier das Ergebnis:

Code:
seekOffset: 64
1,2,0,0,1,1,2,2,0,32,1,2,3,0,0,1,2,4,0,1,1,2,1,0,0,12,6,0,0,6
Position: 94

seekOffset: 64
0000000000000000000000000000000000000000000000000000000000000000 Position: 96

Beim Schreiben sind die Bytes durch Komma getrennt und mittels Serial.print(x,HEX) ausgegeben. Beim Lesen habe ich die Bytes ohne Komma
ausgegeben, als High-Nibble und Low-Nibble in richtiger Reihenfolge (so steht also "00" für 0x00h), so dass zwei Zeichen für ein Byte stehen. Das ist hier aber zum Vergleichen egal. Man sieht auch so, dass es nicht stimmt. Weil beim Lesen bekomme ich nur Nullen zurück (die ich bein Anlegen der Datei mal rein geschrieben habe). Die Write scheint richtig in der Funktion, der Zeiger in der Datei wird ja hochgezählt. Beim Lesen scheint Read auch zu lesen, auch hier wird der Zeiger in der Datei hochgezählt. Bloß was ist mit den Daten? Ich kapiere das nicht.

Hatte jemand so etwas schon mal und kann sein Problem beschreiben? Oder vielleicht weiß es auch jemand, wie es zu solch merwüdigem Ergebnis kommen kann?

Ich suche mal weiter, weiß aber nicht, wie und wo. Als Anhaltspunkt könnte ich noch mitgeben, dass ich beim Schreiben auf SD-Karte auch schon ein ähnliches Problem mit LittleFS hatte. Da habe ich so lang rumgespielt, bis es irgendwie funktionierte und habe dann die Datei vorm Schreiben mit "a" geöffnet. Jetzt will ich in den Flash eines nodeMCU 1.0 schreiben und das funktioniert mit "a" nicht nicht, mit "r+" scheints aber auch nicht.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 14:12
Beitrag #2
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Ich kann noch eine Vermutung aufstellen: "w+" wird von LittleFS wie "w" behandelt, "r+" wie "r".

"a+" benutze ich zum Schreiben, um Daten anzuhängen. Das funktioniert.

Bloß, ich brauche einen Modus, wo ich den Dateizeiger positionieren und dann lesen und schreiben kann.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 14:23
Beitrag #3
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Hast Du mal versucht in a+ mit seek zu arbeiten?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 14:51 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2020 14:57 von Nichtraucher.)
Beitrag #4
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Ich hatte alle Modi durchprobiert. "a+" macht das, was es tun soll. Ab dem Ende der Datei. Die Position des Zeigers mittels seek() wird ignoriert.

Variante "a+" (Schreiben, dann Lesen, jeweils ab Position 64 in der Datei)
Code:
seekOffset: 64

1,2,0,0,1,1,2,2,0,32,1,2,3,0,0,1,2,4,0,1,1,2,1,0,0,12,6,0,0,6, Position: 1048606

seekOffset: 64

0000000000000000000000000000000000000000000000000000000000000000 Position: 96

Ich habe zur Probe die Daten von der Position ausgelesen, die das Ende der Datei darstellte:

Code:
seekOffset: 1048576
0102000001010202003201020300000102040001010201000012060000060000 Position: 1048608

Bloß hängt "a+" eben nur am Dateiende an.

Es scheint, als ob Modi, wo man in die Datei zwischen rein schreiben will (überschreiben) generell nicht funktionieren, mit LittleFS.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 15:09
Beitrag #5
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Hier scheint es aber zu funktionieren.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 16:13
Beitrag #6
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Danke für den Link!

Dort hatte jemand dasselbe Problem. Mit SPIFFs funktioniert es, mit LittleFS nicht. Irgendwas stimmt mit der seek-Funktion nicht? Na jedenfalls stürzen sich alle auf das EOF bei Seek und dann haben die das Thema geschlossen. Bloß, meine Datei ist 1MB groß, da komme ich mit 30 bytes nicht übers Filende raus, wenn ich bei Position 64 in der Datei starte.

Ich war gerade dabei, das weiter zu untersuchen, aber mein Programm macht Mucken. Das muss ich erst beseitigen, damit ich weiter probieren kann.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 16:24
Beitrag #7
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Ich habe die Datei auf 20kb verkleinert, zum Probieren.

"a" verhält sich wie "a+", wie man an der letzten Position sieht. Die Datei wird imme rgrößer, weil die Daten angehängt werden.
Code:
seekOffset: 64
1,2,0,0,1,1,2,2,0,32,1,2,3,0,0,1,2,4,0,1,1,2,1,0,0,12,6,0,0,6, Position: 20542
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2020 16:43 von Nichtraucher.)
Beitrag #8
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Bei "r+" stimmt es jetzt, wo die Datei kleiner ist:

Code:
seekOffset: 64
1,2,0,0,1,1,2,2,0,32,1,2,3,0,0,1,2,4,0,1,1,2,1,0,0,12,6,0,0,6, Position: 94

seekOffset: 64
0102000001010202003201020300000102040001010201000012060000060000 Position: 96

Dann scheint das an der Dateigröße zu liegen. Bei der 1MB-Datei habe ich bemerkt, dass das Schreiben in die Datei sehr lange dauert, gerade so, als wenn sie neu geschrieben würde. Ich vermute, dass die Datei, bei Überschreiben innerhalb der Datei, kopiert wird. Wenn die Datei zu groß ist, scheitert das scheinbar. Dann sind die geschriebenen Daten weg. Jetzt weiß ich nur nicht, was die maximal mögliche Dateigröße hier ist (auf der SD-Karte scheinen auch 2MB-Dateien zu funktionieren, allerdings ist das dann SD.h, nicht LittleFS).

..................

Sooo, ich glaube, das war es erst einmal.
Ich habe die Datei zunächst mit 100kb Größe erstellt. Die Daten scheinen jetzt richtig drin zu stehen. Aber das Schreiben dauert ewig lange (vielleicht 6s für 32 Bytes). Aber zum Ausprobieren reicht. Später verwende ich dafür eine SD-Karte.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 Webserver nach Zeit nicht mehr verfügbar. ESPWolf 19 625 17.01.2021 11:13
Letzter Beitrag: hotsystems
  Sketch upload funktioniert plötzlich nicht mehr basementmedia 2 303 02.01.2021 17:31
Letzter Beitrag: Jan Hirt
  ESP32 Devkit c4 Oled und RFID RC522 betreiben klappt nicht steffus 1 309 23.12.2020 12:45
Letzter Beitrag: hotsystems
  ESP32: Binärdaten mit LittleFS speichern / Zerobytes in Strings ultralex 14 800 15.12.2020 14:00
Letzter Beitrag: Tommy56
  ESP8266-01 verbindet sich nicht mit dem WLAN Kopernikus 1 394 02.12.2020 20:02
Letzter Beitrag: Tommy56
  Wifi Reconnect - nicht blockierend Arduino4Fun 6 581 29.11.2020 10:32
Letzter Beitrag: Arduino4Fun
  D1 Mini digitalWrite(D7, LOW) wird nicht LOW KlaRa 3 473 19.11.2020 13:04
Letzter Beitrag: hotsystems
  8266 EEPROM Zugriff funktioniert nicht BerndP 3 408 18.11.2020 14:28
Letzter Beitrag: Tommy56
  ESP32 arbeitet nicht in Arduino-IDE wonk 3 456 12.11.2020 18:16
Letzter Beitrag: wonk
  ESP32 soll auf MySQL schreiben frankmehlhop 11 961 06.11.2020 21:43
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste