ESP32 mit IDF Toolchain

OP #6452882
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
Gast #6452886
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.
OP #6452907
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?
Gast #6452938
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.
Gast #6452997
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.
#6453072
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
OP #6455429
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren