Wie kann ich ESP32-Programm(-teil/e) von einer SD-Karte laden?
Ich habe eine Frage zum Thema ESP32 und SD-Modul.
Ich habe vor, Programme (C/C++; Arduino IDE) auf SD zu speichern, um sie dann über ein Display auswählen zu können.
Was muss ich tun, um ein externes Programm einzuhängen und was muss ich für einen Compiler nehmen und welches Format für die Dateien (bin, dll,...)?
Hat jemand einen guten Code und gute Tipps?
(Ich habe nur wenig mit C/C++ zu tun, ich habe derzeit nur Python-Projekte)
3 Antworten
Das geht nicht so einfach. Der microcontroller führt nur Programme aus dem flash Speicher aus. Du kannst also nicht einfach ein Programm von der SD Karte ausführen. Du hast ja kein Betriebsystem das dieses in den RAM laden kann.
Du bräuchtest einen Interpreter oder so. Aber ich kenne keinen c++ interpreter für esp32.
Man kann vielleicht irgendwie mit dem bootloader von der SD Karte Sachen in den flash schreiben, aber das ist sehr aufwendig und technisch komplex. Heißt nicht umsonst ROM, read only memory...
Kannst übrigens auch python Code auf dem eps32 laufen lassen, mit Micropython oder circuitpython. Der wird interpretiert, geht also auch von SD Karte...
Pinzipiell ist ed zwar möglich aber nicht wirklich einfach umsetzbar. Für gewöhnlich erzeugt die IDE ein komplettes Code Image welches zum einen statische Adressen beeinhaltet und zum anderen die Hardware neu intialisiert.
Damit es funktioniert müsstest du also die IDE erstmal dazu bringen Position Independend Code zu generieren und du musst sie auch dazu bringen, dass der erzeugte Code von sich aus nichts am Prozessor ändert sondern eben wirklich nur den Teil an Code generiert den du ausführen willst.
Es gibt hierfür kein Standarddateiformat weil es auch nicht sonderlich verbreitet ist das auf einem uC zu tun. Die Endung wäre aber typischerweise .elf oder .bin ist aber eigentlich komplett egal, da die Endung beliebig vergeben werden kann. Also du kannst deine Files dann auch .jpg als Endung geben und das würde nichts ändern.
Du könntest mehrere Images auf der SD Karte haben und dann über den OTA Weg einspielen und ausführen.
Jedes der einzelnen Programme braucht dann aber auch den Teil mit der Programmauswahl