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
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.
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?
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.
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.
Jonas B. schrieb: > Was wäre denn eine sinnvolle Alternative um > performanten C-Code auf dem ESP32 zu programmieren? Das was du bereits machst.
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.