logo

Suletuxe.de
Linux - Nutzer
helfen
Linux - Nutzern

Willkommen, Gast. Bitte Login oder Registrieren.
24. November 2024, 09:35:42
Übersicht Hilfe Suche Login Registrieren

Amateurfunk Sulingen
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  Makerprojekte  |  Arduino und Co (Mikrocontroller)  |  Thema: SD.h File öffnen mittles wildcard " *.bin " « zurück vorwärts »
Seiten: [1] nach unten Drucken
   Autor  Thema: SD.h File öffnen mittles wildcard " *.bin "  (Gelesen 2811 mal)
DL8EBD
Gast

eMail
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: 1319



Linux von Innen

Profil anzeigen
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 teilen, und es Menschen gibt, die bereit sind, dieses Geschenk auch mit eigenem Einsatz anzunehmen.


Freiheit zu erkämpfen reicht nicht. Man muss sie auch verteidigen.


Ohne IT-Kompetenz ist man heutzutage ein willkommenes Opfer und Spielball anderer, egal, welches System oder Gerät man nutzt. Nur Wissen schützt vor Schaden!
DL8EBD
Gast

eMail
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:

Code:

#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: 1319



Linux von Innen

Profil anzeigen
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 teilen, und es Menschen gibt, die bereit sind, dieses Geschenk auch mit eigenem Einsatz anzunehmen.


Freiheit zu erkämpfen reicht nicht. Man muss sie auch verteidigen.


Ohne IT-Kompetenz ist man heutzutage ein willkommenes Opfer und Spielball anderer, egal, welches System oder Gerät man nutzt. Nur Wissen schützt vor Schaden!
Seiten: [1] nach oben Drucken 
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  Makerprojekte  |  Arduino und Co (Mikrocontroller)  |  Thema: SD.h File öffnen mittles wildcard " *.bin " « zurück vorwärts »
Gehe zu: 


Login mit Username, Passwort und Session Länge

 Es wird die Verwendung "Blink"-basierter Browser und mindestens 1024x768 Pixel Bildschirmauflösung
für die beste Darstellung empfohlen
 
freie Software für freie Menschen!
Powered by MySQL Powered by PHP Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2004, YaBB SE Dev Team. All Rights Reserved.
- modified by Andreas Richter (DF8OE)
Valid XHTML 1.0! Valid CSS!