Forum: Mikrocontroller und Digitale Elektronik ESP32 mit IDF Toolchain


von Jonas B. (holocron)


Lesenswert?

Hallo,
ich programmiere aktuell den ESP32 mit der Toolchain idf, die vom 
Hersteller bereitgestellt wird (wie bspw. hier:
Das hat auch alles prima geklappt und funktioniert auch. Allerdings sind 
mir erstmal drei Fragen offen geblieben:
1. Verstehe ich richtig, das das alles open source ist?
2. Wenn ich es nicht falsch gesehen hab, linkt hier CMake gleich jede 
statische Lib zum fertigen Programm. Kann ich das irgendwo abstellen? In 
der CMakeList und in Makefiles konnte ich nichts finden (und ich fände 
es sinnlos, immer jede Lib die es zu ESP32 gibt zu verlinken).
3. Die Toolchain zwingt mich die main function app_main, statt main zu 
nennen. Kann ich das ändern? Im Linkerscript hab ich nichts gefunden.

Um Arduino mach ich bewusst einen Bogen, weil ich das gerne in C 
programmieren würde und das Projekt möglichst schnelle Progammausführung 
benötigt.

Grüße

von Stefan F. (Gast)


Lesenswert?

Jonas B. schrieb:
> Verstehe ich richtig, das das alles open source ist?

Nein. Der größte Teil der Firmware ist nicht Open-Source sondern wird 
nur in Binärform bereit gestellt.

> Die Toolchain zwingt mich die main function app_main, statt main zu
> nennen. Kann ich das ändern?

Was vermutlich daran liegt, dass die main() Funktion Bestandteil des 
binären Codes ist. Diese ruft nach diversen Initialisierungen erst 
deinen Code aus.

Jonas B. schrieb:
> Um Arduino mach ich bewusst einen Bogen, weil ich das gerne in C
> programmieren würde und das Projekt möglichst schnelle Progammausführung
> benötigt.

Ist OK. Arduino baut Arduino auf der Toolchain von Espressif auf, nutzt 
also den gleichen Compiler, die gleichen Bibliotheken und stellt auch 
all deren Features bereit. Arduino und C schließen sich nicht 
gegenseitig aus.

von Jonas B. (holocron)


Lesenswert?

Danke für die Rückmeldung.

Stefan ⛄ F. schrieb:
> Ist OK. Arduino baut Arduino auf der Toolchain von Espressif auf, nutzt
> also den gleichen Compiler, die gleichen Bibliotheken und stellt auch
> all deren Features bereit. Arduino und C schließen sich nicht
> gegenseitig aus.
Ach so, ich könnte also problemlos einfach in der Arduino IDE coden und 
würde trotzdem performanten C Code nutzen/coden können (bzw. "langsame" 
Arduino Funktionen einfach gar nicht nutzen)?

Stefan ⛄ F. schrieb:
> Was vermutlich daran liegt, dass die main() Funktion Bestandteil des
> binären Codes ist. Diese ruft nach diversen Initialisierungen erst
> deinen Code aus.
Oh ach so, also so ähnlich wie in Ardunio mit der loop() Funktion?

von Stefan F. (Gast)


Lesenswert?

Jonas B. schrieb:
> Ach so, ich könnte also problemlos einfach in der Arduino IDE coden und
> würde trotzdem performanten C Code nutzen/coden können (bzw. "langsame"
> Arduino Funktionen einfach gar nicht nutzen)?

Ja genau.

Die Arduino IDE gefällt mir allerdings nicht. Das Arduino Framework mit 
zu nehmen macht nur Sinn, wenn man es auch tatsächlich benutzt.

von Jonas B. (holocron)


Lesenswert?

Stefan ⛄ F. schrieb:
> Die Arduino IDE gefällt mir allerdings nicht. Das Arduino Framework mit
> zu nehmen macht nur Sinn, wenn man es auch tatsächlich benut
Ja mir auch nicht. Was wäre denn eine sinnvolle Alternative um 
performanten C-Code auf dem ESP32 zu programmieren? Außer vielleicht ein 
eigenes Makefile und Linkerscript zu schreiben.

von Stefan F. (Gast)


Lesenswert?

Jonas B. schrieb:
> Was wäre denn eine sinnvolle Alternative um
> performanten C-Code auf dem ESP32 zu programmieren?

Das was du bereits machst.

von Jonas B. (holocron)


Lesenswert?

Stefan ⛄ F. schrieb:
> Das was du bereits machst.
Also die Toolchain zu verwenden?

von Stefan F. (Gast)


Lesenswert?

Jonas B. schrieb:
>> Das was du bereits machst.
> Also die Toolchain zu verwenden?

Ja

von Jonas B. (holocron)


Lesenswert?

Ach so okay, vielen Dank

Stefan ⛄ F. schrieb:
> Was vermutlich daran liegt, dass die main() Funktion Bestandteil des
> binären Codes ist. Diese ruft nach diversen Initialisierungen erst
> deinen Code aus.
Ist also nicht mal das problematisch? Für die Performanz.

von Stefan F. (Gast)


Lesenswert?

Jonas B. schrieb:
> Ist also nicht mal das problematisch? Für die Performanz.

Was das IDF beim Start initialisiert wird wohl auch notwendig sein.

Ich habe das Gefühl, dass du hier im vorauseilenden Gehorsam planlos 
Dinge optimieren willst, ohne vorher den Bedarf zu checken. Damit 
verschwendest du nur wertvolle Lebenszeit.

Optimiere erst, wenn es wirklich zu einem Engpass kommt, und dann 
optimiere nur den Engpass.

von Jonas B. (holocron)


Lesenswert?

Stefan ⛄ F. schrieb:
> Optimiere erst, wenn es wirklich zu einem Engpass kommt, und dann
> optimiere nur den Engpass.
Okay danke, das ist eine gute Idee. Dann nutze ich erstmal alles der 
Toolchain und schaue ob so schon alles gut aufgeht.

von Michael U. (amiga)


Lesenswert?

Hallo,

mehr als Gedanke zu ESP32 IDF, Arduino, C, C++ usw.
Mein Bekannter hat für eine 64x64 Pixel RGB Matrix programmiert.
Untere Hälfte ein Lagerfeuer, daß mit mindestens 20f/s animiert werden 
muß um nicht zu ruckeln. Oebn eine Morphclock, wo es beim Wechseln der 
Ziffern auch nicht ruckeln soll.
Oveb eine Laufschrift mit dem Wetterbericht und anderen Meldungen, die 
absolut soft unbd ruckelfrei scrollen sollte.
Dazu Webserver für Parametereinstellungen, MQTT für Steuerung usw.
Daten vom OpenWeathermap holen, das JSOn dekodieren usw.
Es läuft jetzt alles wunschgemäß, das Konzept hat er intern mehrmal 
umgeworfen...
Herausgekommen ist eine Mischung in der Arduino-IDE mit intensiver 
Nutzung der von Events geschickter Verteilung der Tasks auf die 2 Cores, 
eigene kleine Routinen ich C und C++direkte Aufrufe der IDF-Funktionen, 
Nutzung der Arduino-Libs, jeweils so, wie es sinnvoll war und ihm die 
wenigeste Arbeit machte.

Ich kann da Stefan ⛄ F. nur voll zustimmen, optimiert, wenn es notwendig 
ist und dann da, wo es nutzt.
Man bekommt weder für gesparten Flash noch für nicht genutzte Rechenzeit 
Geld von Espressif zurück. ;-)

Gruß aus Berlin
Michael

von Jonas B. (holocron)


Lesenswert?

Hallo,
danke für die Ratschläge und das Teilen der Erfahrungen!

Ich bin jetzt der Toolchain geblieben und gibt tatsächlich bisher 
keinerlei Performanz-Probleme (bisher musste sogar nicht mal besonderen 
Dinge jenseits von C nutzen, also nur Pointer und die Funktionen vom 
µC).

Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.