Seiten: [1]
|
|
|
|
Autor
|
Thema: SD.h File öffnen mittles wildcard " *.bin " (Gelesen 2764 mal)
|
|
DL8EBD
Gast
|
|
SD.h File öffnen mittles wildcard " *.bin "
« am: 15. Januar 2021, 07:50:09 »
|
|
Hallo zusammen,
folgendes Szenario: ich habe auf einem ESP32 einen Arduino-Sketch geschrieben der es auch gestattet ein Binär File von einer SD Karte einzulesen um damit die Firmware auszutauschen. Das funktioniert alles hervorragend (Update.h)
Auf der SD Karte gibt es ein Verzeichnis /firmware/ und das Binärfile muss aktuell fw.bin lauten. Vereinbart wird, dass es immer nur ein Binärfile in dem Verzeichnis geben wird. Alles gut.... File file = SD.open("/firmware/fw.bin");
Aber: damit man die Binärfiles auf dem Rechner unterscheiden kann, möchte ich sie auf geeignete Weise im Namen nummerieren und nicht jedes mal vor dem Kopieren auf SD-Karte in fw.bin umbenennen. Zum Beispiel sowas: fw0001.bin oder fw0001a.bin usw.
Mein Sketch soll nun, egal wie der Filename lautet, solange er nur auf .bin endet, dieses Binärfile akzeptieren.
File file = SD.open("/firmware/*.bin"); * als wildcard funktioniert leider nicht
Ich finde zu dem Thema auch nichts passendes im Internet..... Hat da wer eine zündende Idee wie man das machen kann?
Ich weiß, es gibt die Möglichkeit "openNextFile()" zu nutzen, die würde aber ungeachtet der Endung auch nicht-bin Files öffnen. Oder nicht?
Daaanke
|
« Letzte Änderung: 15. Januar 2021, 07:52:45 von Thomas » |
Gespeichert
|
|
|
|
Andreas
Administrator
Offline
Einträge: 1190
Linux von Innen
|
|
Re:SD.h File öffnen mittles wildcard " *.bin "
« Antwort #1 am: 15. Januar 2021, 08:16:47 »
|
|
Hallo Thomas,
die open-Funktion erwartet einen exakten Dateinamen - egal in welcher Programmiersprache. Da brauchst Du nicht zu suchen. Ist ja auch einleuchtend: Was soll denn passieren wenn auf ein Wildcard mehrere Dateien passen? Wonach soll entschieden werden?
Du kommst also nicht herum dieses Problem durch eine eigene String-basierte Methode abzuhandeln. Schema etwa so: 1) Du liest das in Frage kommende Verzeichnis ein (z.B. in ein Array) 2) Du parst jedes Element mit einer Stringfunktion auf den passenden Match 3) Du schiebst alle passenden Matches in ein zweites Array 4) Wenn erstes Array durch, gehst Du zum zweiten Array Sollte nur ein Match da sein: Klasse - das ist das richtige. Sollten mehrere da sein musst Du eine Routine programmieren die dem User alle Möglichkeiten zur Auswahl anbietet.
LG Andreas
|
|
Gespeichert
|
Wissen ist das einzige Gut, das mehr wird, wenn man es teilt - wenn es Menschen gibt, die es weitergeben, und es Menschen gibt, die bereit sind, dieses Geschenk auch unter eigenem Einsatz anzunehmen.
Freiheit zu erkämpfen reicht nicht. Man muss sie auch verteidigen.
|
|
|
DL8EBD
Gast
|
|
Re:SD.h File öffnen mittles wildcard " *.bin "
« Antwort #2 am: 15. Januar 2021, 08:24:11 »
|
|
Danke Andreas, ich hatte "befürchtet" dass es einen gewissen Aufwand bedarf und gehofft es wäre auch einfacher möglich. Leuchtet ein, sobald mehrere .bin auftauchen gibt es ein "Problem". Da ich ja ein TFT am ESP habe, überlege ich daher dem Anwender eine Auswahl aller auf der SD Karte verfügbaren .bin zu präsentieren. Dann hätte er die Möglichkeit zwischen verschiedenen Softwareständen auszuwählen.
ESP32 und Firmwareupdate von SD-Karte
wer es mal am ESP32 ausprobieren möchte:
#include "SD.h" #include "Update.h" void firmware_updater() { File file = SD.open("/firmware/fw.bin"); if(!file){ return; } size_t fileSize = file.size(); if(!Update.begin(fileSize)){ return; }; Update.writeStream(file); file.close(); ESP.restart(); }
|
|
was sehr cool ist: unterbricht man das laufende Update, beispielsweise durch eine Spannungsunterbrechung, ist nichts verloren - das original Programm bleibt erhalten. Erst wenn das Update erfolgreich verlief wird nach dem Reboot die neue Firmware verwendet.
Ich teste hier gerade Updates mit rund 500kB großen Binärfiles. Dauer: 5 Sekunden + reboot
Übrigens: bis zum Befehl ESP.restart(); kann man problemlos Debug-Ausgaben auf die serielle Schnittstelle leiten oder wie in meinem Fall, eine Bedienerführung auf einem angeschlossenen TFT darstellen und den Anwender über den Status auf dem Laufenden halten.
Das ist ein Vorteil der ESP32! AVRs könnten das freilich nicht.....
********************************************************
EDIT: .....wobei im MSDOS und auch beim alten PET2001 konnte man wildcards benutzen
"Load "*",8,1" ist mir da noch in Erinnerung geblieben.... es wurde das erste File von der Datasette/Floppy gezogen Man waren das noch Zeiten.
|
« Letzte Änderung: 15. Januar 2021, 19:51:08 von Thomas » |
Gespeichert
|
|
|
|
Andreas
Administrator
Offline
Einträge: 1190
Linux von Innen
|
|
Re:SD.h File öffnen mittles wildcard " *.bin "
« Antwort #3 am: 15. Januar 2021, 08:47:03 »
|
|
Thomas, das ist schon eine Ebene höher: das ist das Betriebssystem bzw. der eingebaute Basic-Interpreter. Ich (und auch Du) benötigst aber etwas auf der COMPILER-PROGRAMMIEREBENE....
LG Andreas
|
|
Gespeichert
|
Wissen ist das einzige Gut, das mehr wird, wenn man es teilt - wenn es Menschen gibt, die es weitergeben, und es Menschen gibt, die bereit sind, dieses Geschenk auch unter eigenem Einsatz anzunehmen.
Freiheit zu erkämpfen reicht nicht. Man muss sie auch verteidigen.
|
|
|
Seiten: [1]
|
|
|
|
|
|
|