Mikrocontroller und Digitale Elektronik
›
Thread
Webapp-stack auf STM32 (und ESP8266)
R
Rabenopa
Gast
11.10.2022 22:12
#7218551
Moin,
mich würden mal eure Einblicke in die aktuellen Trends von Embedded Web
Applications interessieren. Was nutzt ihr so, wenn es darum geht
halbwegs moderne User und Developer Experience (Richtung single page
application) und minimalen Footprint (in meinem Fall auf STM32 mit z.B.
64k) zu vereinbaren? Gibt es Faustregeln, mit denen ich abschätzen kann,
was so die Grenzen des Machbaren sind?
Zuerstmal die obligatorische dumme frage:
Warum auf dem STM32 mit nur 64k?
Pack die Webseite auf den ESP!
Den STM kannst du als "Co-Prozessor" immer noch dazuklemmen.
M
mppt
Gast
12.10.2022 15:53
#7219235
Rabenopa schrieb:
> halbwegs moderne User und Developer Experience (Richtung single page
> application) und minimalen Footprint
Das schließt sich ja wohl gegenseitig aus. Wenn man heute sieht was für
ein Datenmüll auf einem ESP32 landet um ein paar simple Webseite
anzuzeigen oder 5 Werte an Konfiguration einzugeben kann einem schlecht
werden. Libs über Libs. Ich hab mir für den ESP32 Arduino 2.0.5 mal die
Mühe gemacht ein makefile zu schreiben. Allein das als Libs von
Expressif (natürlich binär ohne Quellcode) ist da nötig:
1 LIBS2 = - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump
2 LIBS2 += - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc
3 LIBS2 += - lesp_hw_support - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lasio - lbt - lcbor - lunity - lcmock - lcoap - lnghttp
4 LIBS2 += - lesp - tls - lesp_adc_cal - lesp_hid - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lesp_lcd - lprotobuf - c - lprotocomm - lmdns
5 LIBS2 += - lesp_local_ctrl - lsdmmc - lesp_serial_slave_link - lesp_websocket_client - lexpat - lwear_levelling - lfatfs - lfreemodbus - ljsmn - ljson - llibsodium
6 LIBS2 += - lmqtt - lopenssl - lperfmon - lspiffs - lulp - lwifi_provisioning - lgpio_button - ljson_parser - ljson_generator - lesp_schedule - lesp_rainmaker - lqrcode
7 LIBS2 += - lws2812_led - lesp - dsp - lesp32 - camera - lesp_littlefs - lfb_gfx - lasio - lcbor - lcmock - lunity - lcoap - lesp_lcd - lesp_local_ctrl - lesp_websocket_client
8 LIBS2 += - lexpat - lfreemodbus - ljsmn - llibsodium - lperfmon - lesp_adc_cal - lesp_hid - lfatfs - lwear_levelling - lopenssl - lspiffs - lesp_rainmaker - lmqtt - lwifi_provisioning
9 LIBS2 += - lprotocomm - lbt - lbtdm_app - lprotobuf - c - lmdns - ljson - ljson_parser - ljson_generator - lesp_schedule - lqrcode - lcat_face_detect - lhuman_face_detect - lcolor_detect
10 LIBS2 += - lmfn - ldl - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump
11 LIBS2 += - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support
12 LIBS2 += - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lsdmmc
13 LIBS2 += - lesp_serial_slave_link - lulp - lmbedtls - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi - lesp_ringbuf - lefuse - lesp_ipc - ldriver
14 LIBS2 += - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs
15 LIBS2 += - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common
16 LIBS2 += - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota
17 LIBS2 += - lsdmmc - lesp_serial_slave_link - lulp - lmbedtls - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi
18 LIBS2 += - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy
19 LIBS2 += - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support
20 LIBS2 += - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client
21 LIBS2 += - lesp_http_server - lesp_https_ota - lsdmmc - lesp_serial_slave_link - lulp - lmbedtls - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow
22 LIBS2 += - lmesh - lnet80211 - lpp - lsmartconfig - lwapi - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support
23 LIBS2 += - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter
24 LIBS2 += - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common - lesp_timer
25 LIBS2 += - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lsdmmc
26 LIBS2 += - lesp_serial_slave_link - lulp - lmbedtls - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi
27 LIBS2 += - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub
28 LIBS2 += - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi
29 LIBS2 += - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp
30 LIBS2 += - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lsdmmc - lesp_serial_slave_link - lulp - lmbedtls
31 LIBS2 += - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi - lphy - lrtc - lesp_phy - lphy
32 LIBS2 += - lrtc - lesp_phy - lphy - lrtc - lxt_hal - lm - lnewlib - lstdc ++ - lpthread - lgcc - lcxx - lapp_trace - lgcov - lapp_trace - lgcov - lc - lmbedtls_2
Da ist der ganze Arduino-Kram noch nicht dabei. Ich frage mich manchmal
wo das noch hinführen soll.
Beim Versuch so ein Projekt wie dieses:
https://ecocurious.de/projekte/multigeiger-2/
zu bauen, stürzt das ganze ab mit ständigen Reboots des ESP32. Man muss
Plattformio nehmen und dann auch nur eine bestimmte Version.
Arduino-ESP32 geht nur bis 1.0.6 alle 2er Versionen nicht mehr.
Reproduzierbare Abstürze in den binären Libs vom ESP32. Ich konnte das
fixen in dem ich die Register des mcpwm-Timers direkt beschrieben habe
anstelle von set_frequecy() ö.ä.
Da wird sicher wieder eine double-Division drin sein die das ganze
Crashen lässt wenn man es aus einem Interrupt aufruft. Selbst an der
richtigen Stelle fixen geht nicht, da die Libs binär sind.
Alles in allem hasse ich den ESP32 genau so wie den ESP8622. Das
Preis-Leistungsverhältnis ist sicher gut, aber die ganze Infrastruktur
ist weit von optimal entfernt. Mehr als Bastelprojekte sind damit wohl
kaum möglich.
Und da kann ich den o.g. Ansatz nur zu gut verstehen und die Dinger
höchstens als Co-Prozessoren für reine Kommunikation/Konfiguration zu
verwenden.
mppt schrieb:
> Und da kann ich den o.g. Ansatz nur zu gut verstehen und die Dinger
> höchstens als Co-Prozessoren für reine Kommunikation/Konfiguration zu
> verwenden.
Ja. Aber du hast die Wahl, auf welcher Ebene das passiert. Statt da per
+AT-Kommandos auf TCP-Ebene rumzukrebsen, kannst du auch komplett HTTP,
HTML-Templating, Ausliefern statischer Files, Websocket-Server usw. auf
den ESP auslagern.
Der ist dann immer nur noch ein "Kommunikations-Coprozessor".
Wenn man die "Sprache" zwischen ihm und dem "Hauptprozessor" halbwegs
vernünftig anlegt, ist auch beides getrennt schön testbar.
mppt schrieb:
> LIBS2....
Irgendwas kopiert oder rausge-"grep"-t, was du selber nicht verstehst,
und das soll jetzt als Totschlag-Argument herhalten?
Geht auch umgekehrt: Die AT-Firmware auf dem ESP ist mit demselben SDK
und denselben Bibliotheken erstellt worden. Also genauso böse?
JS
J. S.
(jojos)
12.10.2022 16:10
#7219258
die Libs sind ja da weil die Funktionen gebraucht werden. Sollte alles
in ein Modul geschrieben werden? Ein System mit Web (mit HTTPS) und RTOS
ist nun mal etwas komplexer.
In anderen Anwendungen mit ESP32 wie z.B. Tasmota sind auch unzählige
Libs zusammengebaut, und das läuft und läuft und läuft.
PlattformIO ist da auch um Längen besser als die Arduino IDE weil es
eine ordentliche Libraryverwaltung hat und konkrete Versionen angegeben
werden können. Bei der Arduino IDE ist das ein Glücksspiel.
M
mppt
Gast
12.10.2022 17:01
#7219299
Εrnst B. schrieb:
> Irgendwas kopiert oder rausge-"grep"-t, was du selber nicht verstehst,
> und das soll jetzt als Totschlag-Argument herhalten?
Bist du blöd? Das habe ich aus meinen von Hand selbst geschriebenen
makefile kompiert um zu zeigen wieviel libs aus unbekannten Quellen man
sich da ins Boot holt. Als Binarie und völlig ohne Kontrolle. Code der
in solchen Libs vor sich hin schläft um irgendwann mal böse Dinge zu
tun, erkennt niemand mehr. Auch weil niemand danach sucht.
J. S. schrieb:
> In anderen Anwendungen mit ESP32 wie z.B. Tasmota sind auch unzählige
> Libs zusammengebaut, und das läuft und läuft und läuft.
Schön für alle die meinen fette Firewalls und Virenscanner zu brauchen
aber bei allem was IoT betrifft blindes Gottvertrauen haben.
> PlattformIO ist da auch um Längen besser als die Arduino IDE weil es
> eine ordentliche Libraryverwaltung hat und konkrete Versionen angegeben
> werden können. Bei der Arduino IDE ist das ein Glücksspiel.
Man muss nicht die Arduino IDE verwenden. Mit arduino-cli kann man auch
alle Abhängigkeiten mit entsprechenden Versionen local in relativen
Verzeichnissen halten und damit eine Umgebung für ein Projekt schaffen
das nicht mit anderen Projekten kollidiert.
Ich bevorzuge halt meine eigenen makefile-Umgebung.
mppt schrieb:
> Das habe ich aus meinen von Hand selbst geschriebenen
> makefile kompiert um zu zeigen wieviel libs aus unbekannten Quellen man
> sich da ins Boot holt.
Und damit die Liste länger wird, hast du dieselben libs immer und immer
wieder eingetragen, in der Hoffnung dass das beim Lesen hier nicht
auffällt?
Ansonsten: Sei doch froh, dass es soviele kleine Libs sind. Da hast du
wenigstens etwas Kontrolle, was im Binary landet.
bei einem "-lesp_everything", wär deine Linker-Kommandozeile kürzer,
aber isses das wert?
SF
Stefan F.
Gast
12.10.2022 18:59
#7219377
Εrnst B. schrieb:
> Und damit die Liste länger wird, hast du dieselben libs immer und immer
> wieder eingetragen, in der Hoffnung dass das beim Lesen hier nicht
> auffällt?
Geil. Warum macht man das?
M
mppt
Gast
12.10.2022 19:01
#7219378
Εrnst B. schrieb:
> Und damit die Liste länger wird, hast du dieselben libs immer und immer
> wieder eingetragen, in der Hoffnung dass das beim Lesen hier nicht
> auffällt?
>
> Ansonsten: Sei doch froh, dass es soviele kleine Libs sind. Da hast du
> wenigstens etwas Kontrolle, was im Binary landet.
>
> bei einem "-lesp_everything", wär deine Linker-Kommandozeile kürzer,
> aber isses das wert?
Wenn hier einer denkt ich denke mir das nur aus um jemanden zu ärgern.
Hier ist der log der Linkerzeile vom Arduino beim o.g.
Multigeiger-Projekt
1 "I: \\ MultiGeiger \\ arduino \\ data \\ packages \\ esp32 \\ tools \\ xtensa-esp32-elf-gcc \\ gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-g++" "-Wl,--Map=i: \\ MultiGeiger \\ build/multigeiger.ino.map" "-LI: \\ MultiGeiger \\ arduino \\ data \\ packages \\ esp32 \\ hardware \\ esp32 \\ 2.0.5/tools/sdk/esp32/lib" "-LI: \\ MultiGeiger \\ arduino \\ data \\ packages \\ esp32 \\ hardware \\ esp32 \\ 2.0.5/tools/sdk/esp32/ld" "-LI: \\ MultiGeiger \\ arduino \\ data \\ packages \\ esp32 \\ hardware \\ esp32 \\ 2.0.5/tools/sdk/esp32/dio_qspi" - T esp32 . rom . redefined . ld - T memory . ld - T sections . ld - T esp32 . rom . ld - T esp32 . rom . api . ld - T esp32 . rom . libgcc . ld - T esp32 . rom . newlib - data . ld - T esp32 . rom . syscalls . ld - T esp32 . peripherals . ld - mlongcalls - Wno - frame - address - Wl , -- cref - Wl , -- gc - sections - fno - rtti - fno - lto - u ld_include_hli_vectors_bt - u _Z5setupv - u _Z4loopv - u esp_app_desc - u pthread_include_pthread_impl - u pthread_include_pthread_cond_impl - u pthread_include_pthread_local_storage_impl - u pthread_include_pthread_rwlock_impl - u include_esp_phy_override - u ld_include_highint_hdl - u start_app - u start_app_other_cores - u __ubsan_include - Wl , -- wrap = longjmp - u __assert_func - u vfs_include_syscalls_impl - Wl , -- undefined = uxTopUsedPriority - u app_main - u newlib_include_heap_impl - u newlib_include_syscalls_impl - u newlib_include_pthread_impl - u newlib_include_assert_impl - u __cxa_guard_dummy - Dhal_init = LMICHAL_init - DESP32 - DCFG_eu868 = 1 - DCFG_sx1276_radio = 1 - DARDUINO_LMIC_PROJECT_CONFIG_H_SUPPRESS = 1 - Wl , -- start - group "sketch \\ ble.cpp.o" "sketch \\ chkhardware.cpp.o" "sketch \\ clock.cpp.o" "sketch \\ display.cpp.o" "sketch \\ log.cpp.o" "sketch \\ log_data.cpp.o" "sketch \\ loraWan.cpp.o" "sketch \\ multigeiger.ino.cpp.o" "sketch \\ speaker.cpp.o" "sketch \\ switches.cpp.o" "sketch \\ thp_sensor.cpp.o" "sketch \\ timers.cpp.o" "sketch \\ transmission.cpp.o" "sketch \\ tube.cpp.o" "sketch \\ utils.cpp.o" "sketch \\ webconf.cpp.o" "libraries \\ IotWebConf \\ IotWebConf.cpp.o" "libraries \\ IotWebConf \\ IotWebConfMultipleWifi.cpp.o" "libraries \\ IotWebConf \\ IotWebConfOptionalGroup.cpp.o" "libraries \\ IotWebConf \\ IotWebConfParameter.cpp.o" "libraries \\ WiFi \\ WiFi.cpp.o" "libraries \\ WiFi \\ WiFiAP.cpp.o" "libraries \\ WiFi \\ WiFiClient.cpp.o" "libraries \\ WiFi \\ WiFiGeneric.cpp.o" "libraries \\ WiFi \\ WiFiMulti.cpp.o" "libraries \\ WiFi \\ WiFiSTA.cpp.o" "libraries \\ WiFi \\ WiFiScan.cpp.o" "libraries \\ WiFi \\ WiFiServer.cpp.o" "libraries \\ WiFi \\ WiFiUdp.cpp.o" "libraries \\ WebServer \\ Parsing.cpp.o" "libraries \\ WebServer \\ WebServer.cpp.o" "libraries \\ WebServer \\ detail \\ mimetable.cpp.o" "libraries \\ DNSServer \\ DNSServer.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLE2904.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEAddress.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEAdvertisedDevice.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEAdvertising.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEBeacon.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLECharacteristic.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEClient.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEDescriptor.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEDevice.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEEddystoneTLM.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEEddystoneURL.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEExtAdvertising.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEHIDDevice.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLERemoteCharacteristic.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLERemoteDescriptor.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLERemoteService.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEScan.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLESecurity.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEServer.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEService.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEUUID.cpp.o" "libraries \\ NimBLE-Arduino \\ NimBLEUtils.cpp.o" "libraries \\ NimBLE-Arduino \\ nimble \\ esp_port \\ esp-hci \\ src \\ esp_nimble_hci.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ esp_port \\ port \\ src \\ esp_nimble_mem.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ aes_decrypt.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ aes_encrypt.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ cbc_mode.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ ccm_mode.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ cmac_mode.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ ctr_mode.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ ctr_prng.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ ecc.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ ecc_dh.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ ecc_dsa.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ ecc_platform_specific.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ hmac.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ hmac_prng.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ sha256.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ ext \\ tinycrypt \\ src \\ utils.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_adv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_conn.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_conn_hci.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_ctrl.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_dtm.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_hci.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_hci_ev.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_iso.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_rand.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_resolv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_rfmgmt.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_scan.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_sched.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_supp_cmd.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_sync.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_trace.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_utils.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ controller \\ src \\ ble_ll_whitelist.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ drivers \\ nrf51 \\ src \\ ble_hw.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ drivers \\ nrf51 \\ src \\ ble_phy.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ drivers \\ nrf52 \\ src \\ ble_hw.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ drivers \\ nrf52 \\ src \\ ble_phy.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ drivers \\ nrf52 \\ src \\ ble_phy_trace.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ access.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ adv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ aes-ccm.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ app_keys.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ beacon.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ cdb.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ cfg.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ cfg_cli.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ cfg_srv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ crypto.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ friend.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ glue.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ health_cli.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ health_srv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ heartbeat.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ light_model.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ lpn.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ mesh.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ model_cli.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ model_srv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ net.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ nodes.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ pb_adv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ pb_gatt.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ prov.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ prov_device.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ provisioner.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ proxy.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ rpl.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ settings.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ shell.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ subnet.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ mesh \\ src \\ transport.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ services \\ ans \\ src \\ ble_svc_ans.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ services \\ bas \\ src \\ ble_svc_bas.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ services \\ dis \\ src \\ ble_svc_dis.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ services \\ gap \\ src \\ ble_svc_gap.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ services \\ gatt \\ src \\ ble_svc_gatt.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ services \\ ias \\ src \\ ble_svc_ias.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ services \\ ipss \\ src \\ ble_svc_ipss.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ services \\ lls \\ src \\ ble_svc_lls.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_att.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_att_clt.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_att_cmd.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_att_svr.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_eddystone.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_gap.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_gattc.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_gatts.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_gatts_lcl.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_adv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_atomic.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_cfg.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_conn.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_flow.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_hci.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_hci_cmd.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_hci_evt.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_hci_util.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_id.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_log.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_mbuf.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_misc.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_mqueue.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_periodic_sync.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_pvcy.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_resolv.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_shutdown.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_startup.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_hs_stop.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_ibeacon.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_l2cap.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_l2cap_coc.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_l2cap_sig.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_l2cap_sig_cmd.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_monitor.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_sm.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_sm_alg.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_sm_cmd.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_sm_lgcy.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_sm_sc.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_store.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_store_util.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ src \\ ble_uuid.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ store \\ config \\ src \\ ble_store_config.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ store \\ config \\ src \\ ble_store_config_conf.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ store \\ config \\ src \\ ble_store_nvs.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ host \\ util \\ src \\ addr.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ nimble \\ transport \\ ram \\ src \\ ble_hci_ram.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ endian.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ hal_timer.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ hal_uart.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ mem.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ nimble_port.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ os_cputime.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ os_cputime_pwr2.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ os_mbuf.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ os_mempool.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ nimble \\ src \\ os_msys_init.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ npl \\ freertos \\ src \\ nimble_port_freertos.c.o" "libraries \\ NimBLE-Arduino \\ nimble \\ porting \\ npl \\ freertos \\ src \\ npl_os_freertos.c.o" "libraries \\ U8g2 \\ U8g2lib.cpp.o" "libraries \\ U8g2 \\ U8x8lib.cpp.o" "libraries \\ U8g2 \\ clib \\ mui.c.o" "libraries \\ U8g2 \\ clib \\ mui_u8g2.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_bitmap.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_box.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_buffer.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_button.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_circle.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_cleardisplay.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_d_memory.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_d_setup.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_font.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_fonts.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_hvline.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_input_value.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_intersection.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_kerning.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_line.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_ll_hvline.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_message.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_polygon.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_selection_list.c.o" "libraries \\ U8g2 \\ clib \\ u8g2_setup.c.o" "libraries \\ U8g2 \\ clib \\ u8log.c.o" "libraries \\ U8g2 \\ clib \\ u8log_u8g2.c.o" "libraries \\ U8g2 \\ clib \\ u8log_u8x8.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_8x8.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_byte.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_cad.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_capture.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_a2printer.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_gp1247ai.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_gp1287ai.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_gu800.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_hd44102.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_il3820_296x128.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ist3020.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ist3088.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ist7920.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ks0108.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_lc7981.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ld7032_60x32.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ls013b7dh03.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_max7219.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_pcd8544_84x48.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_pcf8812.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_pcf8814_hx1230.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_s1d15721.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_s1d15e06.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_sbn1661.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_sed1330.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_sh1106_64x32.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_sh1106_72x40.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_sh1107.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_sh1108.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_sh1122.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1305.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_128x32.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_128x64_noname.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_2040x16.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_48x64.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_64x32.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_64x48.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_72x40.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_96x16.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1306_96x40.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1309.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1316.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1317.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1318.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1320.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1322.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1325.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1326.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1327.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1329.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1606_172x72.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_ssd1607_200x200.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7511.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st75160.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st75256.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7528.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st75320.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7565.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7567.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7571.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7586s_erc240160.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7586s_jlx384160.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7586s_s028hn118a.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7586s_ymc240160.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7588.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_st7920.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_t6963.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1601.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1604.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1608.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1609.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1610.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1611.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1617.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1638.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1701_dogs102.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_d_uc1701_mini12864.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_debounce.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_display.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_fonts.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_gpio.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_input_value.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_message.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_selection_list.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_setup.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_string.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_u16toa.c.o" "libraries \\ U8g2 \\ clib \\ u8x8_u8toa.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ aes \\ ideetron \\ AES-128_V10.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ aes \\ lmic.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ aes \\ other.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4420.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4551.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4610.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4611.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4612.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4617.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4618.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4630.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4801.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_catena4802.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_disco_l072cs_lrwan1.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_feather32u4lora.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_featherm0lora.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_heltec_lora32.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_thisboard.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_ttgo_lora32_v1.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ getpinmap_ttgo_lora32_v2.1.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ hal \\ hal.cpp.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_as923.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_au915.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_channelshuffle.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_compliance.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_eu868.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_eu_like.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_in866.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_kr920.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_us915.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_us_like.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ lmic_util.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ oslmic.c.o" "libraries \\ MCCI_LoRaWAN_LMIC_library \\ lmic \\ radio.c.o" "libraries \\ SPI \\ SPI.cpp.o" "libraries \\ Adafruit_Unified_Sensor \\ Adafruit_Sensor.cpp.o" "libraries \\ Adafruit_BME280_Library \\ Adafruit_BME280.cpp.o" "libraries \\ Adafruit_BusIO \\ Adafruit_BusIO_Register.cpp.o" "libraries \\ Adafruit_BusIO \\ Adafruit_I2CDevice.cpp.o" "libraries \\ Adafruit_BusIO \\ Adafruit_SPIDevice.cpp.o" "libraries \\ Wire \\ Wire.cpp.o" "libraries \\ Adafruit_BME680_Library \\ Adafruit_BME680.cpp.o" "libraries \\ Adafruit_BME680_Library \\ bme68x.c.o" "libraries \\ WiFiClientSecure \\ WiFiClientSecure.cpp.o" "libraries \\ WiFiClientSecure \\ esp_crt_bundle.c.o" "libraries \\ WiFiClientSecure \\ ssl_client.cpp.o" "libraries \\ HTTPClient \\ HTTPClient.cpp.o" "libraries \\ Update \\ HttpsOTAUpdate.cpp.o" "libraries \\ Update \\ Updater.cpp.o" "libraries \\ EEPROM \\ EEPROM.cpp.o" "libraries \\ ESPmDNS \\ ESPmDNS.cpp.o" "libraries \\ FS \\ FS.cpp.o" "libraries \\ FS \\ vfs_api.cpp.o" "core \\ core.a" - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lasio - lbt - lcbor - lunity - lcmock - lcoap - lnghttp - lesp - tls - lesp_adc_cal - lesp_hid - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lesp_https_server - lesp_lcd - lprotobuf - c - lprotocomm - lmdns - lesp_local_ctrl - lsdmmc - lesp_serial_slave_link - lesp_websocket_client - lexpat - lwear_levelling - lfatfs - lfreemodbus - ljsmn - ljson - llibsodium - lmqtt - lopenssl - lperfmon - lspiffs - lulp - lwifi_provisioning - lrmaker_common - ljson_parser - ljson_generator - lesp_schedule - lesp_rainmaker - lgpio_button - lqrcode - lws2812_led - lesp - dsp - lesp - sr - lesp32 - camera - lesp_littlefs - lfb_gfx - lasio - lcbor - lcmock - lunity - lcoap - lesp_lcd - lesp_websocket_client - lexpat - lfreemodbus - ljsmn - llibsodium - lperfmon - lesp_adc_cal - lesp_hid - lfatfs - lwear_levelling - lopenssl - lesp_rainmaker - lesp_local_ctrl - lesp_https_server - lwifi_provisioning - lprotocomm - lbt - lbtdm_app - lprotobuf - c - lmdns - lrmaker_common - lmqtt - ljson_parser - ljson_generator - lesp_schedule - lqrcode - lcat_face_detect - lhuman_face_detect - lcolor_detect - lmfn - ldl - lmultinet - lesp_audio_processor - lesp_audio_front_end - lwakenet - lesp - sr - lmultinet - lesp_audio_processor - lesp_audio_front_end - lwakenet - ljson - lspiffs - ldl_lib - lc_speech_features - lwakeword_model - lmultinet2_ch - lesp_tts_chinese - lvoice_set_xiaole - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lsdmmc - lesp_serial_slave_link - lulp - lmbedtls_2 - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lsdmmc - lesp_serial_slave_link - lulp - lmbedtls_2 - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lsdmmc - lesp_serial_slave_link - lulp - lmbedtls_2 - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lsdmmc - lesp_serial_slave_link - lulp - lmbedtls_2 - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi - lesp_ringbuf - lefuse - lesp_ipc - ldriver - lesp_pm - lmbedtls - lapp_update - lbootloader_support - lspi_flash - lnvs_flash - lpthread - lesp_gdbstub - lespcoredump - lesp_phy - lesp_system - lesp_rom - lhal - lvfs - lesp_eth - ltcpip_adapter - lesp_netif - lesp_event - lwpa_supplicant - lesp_wifi - lconsole - llwip - llog - lheap - lsoc - lesp_hw_support - lxtensa - lesp_common - lesp_timer - lfreertos - lnewlib - lcxx - lapp_trace - lnghttp - lesp - tls - ltcp_transport - lesp_http_client - lesp_http_server - lesp_https_ota - lsdmmc - lesp_serial_slave_link - lulp - lmbedtls_2 - lmbedcrypto - lmbedx509 - lcoexist - lcore - lespnow - lmesh - lnet80211 - lpp - lsmartconfig - lwapi - lphy - lrtc - lesp_phy - lphy - lrtc - lesp_phy - lphy - lrtc - lxt_hal - lm - lnewlib - lstdc ++ - lpthread - lgcc - lcxx - lapp_trace - lgcov - lapp_trace - lgcov - lc - Wl , -- end - group - Wl , - EL - o multigeiger . ino . elf
2 "I: \\ MultiGeiger \\ arduino \\ data \\ packages \\ esp32 \\ tools \\ esptool_py \\ 4.2.1/esptool.exe" -- chip esp32 elf2image -- flash_mode dio -- flash_freq 80 m -- flash_size 8 MB - o "i: \\ MultiGeiger \\ build/multigeiger.ino.bin" "i: \\ MultiGeiger \\ build/multigeiger.ino.elf"
3 esptool . py v4 . 2 . 1
Das ist eine einzige Befehlszeile und die Wiederholungen der libs sind
da schon drin. Ich habe aber kein Interesse daran die Hintergründe zu
untersuchen, dazu mache ich mit den Dingern viel zu wenig. Ich hatte vor
Jahren beim ESP8622 schon angefangen ein makefile zu schreiben und habe
das beim ESP32 weiter so gemacht. Natürlich habe ich mich da an Arduino
orientiert. Auf alle Fälle ist mit einem reinen Makefile auch ein make
-j x möglich, was mit 8 Kernen ungleich schneller zur Sache geht als
arduino und arduino-cli. Wenn ich eine Zeile in Code ändere brauchr
arduino(-cli) ca. 1 Minute zum übersetzen jedesmal alle cpp Datein des
Sketches übersetzt werden, ob geändert oder nicht. Mit make dauert das
nur 8s.
mppt schrieb:
> Ich habe aber kein Interesse daran die Hintergründe zu
> untersuchen,
Oben hast du noch geschrieben:
mppt schrieb:
> Das habe ich aus meinen von Hand selbst geschriebenen
> makefile kompiert
...
> Ich hab mir für den ESP32 Arduino 2.0.5 mal die
> Mühe gemacht ein makefile zu schreiben .
...
> Ich bevorzuge halt meine eigenen makefile-Umgebung.
d.H. du kannst keine Makefiles schreiben, willst aber eins, um bei
deinen Arduino-Kumpels anzugeben? Weird Flex?
Darum hast du dir die Compiler-Anweisung aus einem Arduino-Build ganz
alleine in ein Makefile kopiert? Toll gemacht. Super. Ich ziehe meinen
Hut vor deinen überlegenen Fähigkeiten.
Aber dazu, die Ungereimtheiten aus dem Arduino-Buildsystem aufzuräumen
hat's nicht mehr gereicht?
Macht ja nix, größer ist besser, auch bei Makefiles.
Dann können wir ja zum Thema zurückkommen, da geht's um einen ESP8266,
nicht ESP32. Da ist's nur eine kleine Handvoll an Libs aus dem SDK die
dazugelinkt werden (und keine Sources mitgeliefert haben).
R
Rabenopa
Gast
13.10.2022 00:23
#7219611
Εrnst B. schrieb:
> Zuerstmal die obligatorische dumme frage:
>
> Warum auf dem STM32 mit nur 64k?
weil ich solche rumliegen habe und grob einschätzen will, wie weit ich
damit komme bevor ich mich ggf gleich für was größeres entscheide. Also
bevor ich anfange loszulöten.
> Pack die Webseite auf den ESP!
> Den STM kannst du als "Co-Prozessor" immer noch dazuklemmen.
Hatte nicht auf dem Schirm, dass das eine Option ist. Das ist natürlich
sehr hilfreich.
R
Rabenopa
Gast
13.10.2022 22:02
#7220688
Sehe jetzt, dass meine Frage etwas doof war. Ich hab wohl erstmal nicht
gecheckt, dass der ESP im Grunde ein vollwertiger Microcontroller und
nicht nur ein reines Wifi-Interface ist. Für meine Anwendung macht es
dann glaub ich mehr Sinn, STM32 und ESP8266 im Master-Master-Modus
laufen zu lassen. STM macht den Hardwarekram, tauscht per UART State mit
dem ESP aus, der die Außenkommunikation managt. Danke für die
Hilfestellung!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren