Arduino als Komponente

Sehr cool!
Ich halte das für sinnvoll, dass die Flags erstmal aktiv sind. Auf diese Art können wir viel besser Probleme finden und identifizieren. Sollte auch nicht viel an Performance kosten. Wenn wir dann Mal weiter sind können wir sie ja ganz einfach raus nehmen.
Über das define in der settings.h sollte aber eigentlich die Ausgabe des debug Zeug deaktiviert sein. Oder?

1 „Gefällt mir“

Es ist geplant, „Arduino als Komponente“ zum Standard zu machen. Es dauert zwar länger, den Code zu kompilieren (aber auch nicht jedes Mal), aber die Vorteile überwiegen. Auf meinem Macbook pro M1 pro 2021 dauert es insgesamt (clean build) 59 Sekunden, auf einem Laptop von 2012 mit Core I7 (Dual Core) waren es unter Linux in einem Test eben 5:10 min.

Vielleicht finden sich noch ein paar Leute, die das unter Windows mal testen können. Sollte es zu einer Fehlermeldung kommen, dann bitte „clean“ oder „full clean“ ausführen. Mehr musste ich unter Linux auf jeden Fall nicht machen.

Um „make menuconfig“ lauffähig zu kriegen, ist ggf. noch mehr Arbeit notwendig. Aber das ist eigentlich nichts, was der „normale Benutzer“ machen muss.

Hinweis: Ich gehe davon aus, dass wir noch dieses Jahr den DEV-Branch zum neuen Master machen werden.

6 „Gefällt mir“

Sehr cool! Damit sind wir auf jeden Fall zukunftsfähig und flexibel :slight_smile:

Bei mir sind es ohne Komponente beim Clean-Build ca. 50 s.
Clean-Build mit Arduino als Komponente ca. 2 min 15 s. Windows 11 - Ryzen 5 (6 Kerne).
Müsste es mal mit dem WSL (Linux in Windows) versuchen, das sollte nochmal deutlich schneller sein, da man aber selten den clean-build benötigt spielt es auch wirklich keine so große Rolle…

2 „Gefällt mir“

Bei mir: Mac Intel 2019 Core I9 mit Parallels auf Windows 11 für einen kompletten Build ca. 5 Minuten, danach geht’s schneller ca 30 Sekunden.
„Arduino als Komponente“ als Standard ist eingecheckt, außerdem ist die Audiobibliothek jetzt festgepinnt.

An dieser Stelle nochmals Danke an @Joe91 für die ganze Arbeit!

4 „Gefällt mir“

Die ganze Basis und der Großteil davon kommt von @fschrempf :slight_smile: !
Ich habe da dann nur voll drauf aufgesetzt…
Freue mich aber in jedem Fall daran, dass das jetzt so schön funktioniert :+1:

4 „Gefällt mir“

Ich brauche für einen Clean Build 3:40min auf nem i9-10885h mit Windows10.

Imac M1 8-Core 2021 , Clean-Build 2:20 , danach 0:23

Da ich nicht ganz auf dem Laufenden bin meine Frage:
Was ist die Basis für den Test: Einfach den aktuellen devbranch erzeugen, oder sind noch weitere Einstellungen notwendig um Arduino als Komponente zu aktivieren?

@Niko Damit brauchst du nur auf den aktuellen Stand den Dev gehen und einen Build machen

1 „Gefällt mir“

Also schlussendlich geht’s mir einfach nur darum zu sehen, ob das Ganze irgendwelche Probleme beim Kompilieren macht durch Software, die fehlt.

So, zurück vom Urlaub.
Hab das jetzt mit dem aktuellen devbranch getestet:

  • Von Git den devbranch als ZIP heruntergeladen
  • Lokal extrahiert
  • Ornder mit VC open folder geöffnet
  • compiliert
    Dauer ca. 2:45 nachdem alle Libs geladen wurden
    PASS: OK

Dann nochmals „PlatformIO:New Terminal“ geöffnet:

  • Befehl ausgeführt> pio run --target clean
  • BUILD nochmals gestartet mit fpolgendem Ergebnis:
Linking .pio\build\lolin_d32_pro_sdmmc_pe\firmware.elf
Retrieving maximum program size .pio\build\lolin_d32_pro_sdmmc_pe\firmware.elf
Checking size .pio\build\lolin_d32_pro_sdmmc_pe\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [===       ]  30.1% (used 98628 bytes from 327680 bytes)
Flash: [===       ]  30.8% (used 2016477 bytes from 6553600 bytes)
Building .pio\build\lolin_d32_pro_sdmmc_pe\firmware.bin
esptool.py v4.5.1
Creating esp32 image...
Merged 25 ELF sections
Successfully created esp32 image.
================================================================================== [SUCCESS] Took 189.09 seconds ==================================================================================

Environment             Status    Duration
----------------------  --------  ------------
lolin_d32_pro_sdmmc_pe  SUCCESS   00:03:09.088
=================================================================================== 1 succeeded in 00:03:09.088 =================================================================================== 

Gleich nochmals ein BUILD gestartet:

Building in release mode
Compiling .pio\build\lolin_d32_pro_sdmmc_pe\src\Web.o
Linking .pio\build\lolin_d32_pro_sdmmc_pe\firmware.elf
Retrieving maximum program size .pio\build\lolin_d32_pro_sdmmc_pe\firmware.elf
Checking size .pio\build\lolin_d32_pro_sdmmc_pe\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [===       ]  30.1% (used 98628 bytes from 327680 bytes)
Flash: [===       ]  30.8% (used 2016477 bytes from 6553600 bytes)
Building .pio\build\lolin_d32_pro_sdmmc_pe\firmware.bin
esptool.py v4.5.1
Creating esp32 image...
Merged 25 ELF sections
Successfully created esp32 image.
=================================================================================== [SUCCESS] Took 46.34 seconds ===================================================================================

Environment             Status    Duration
----------------------  --------  ------------
lolin_d32_pro_sdmmc_pe  SUCCESS   00:00:46.344
=================================================================================== 1 succeeded in 00:00:46.344 =================================================================================== 

AlLes auf meinem Notebook mit Windows 11

Sieht alles OK aus.

1 „Gefällt mir“

Hattest du das gedanklich für dich gemacht? Oder ggf., weil User, die sich mit git nicht auskennen, ggf. so agieren würden? Weil brauchen tust du das eigentlich nicht.


In meinem Repository solltest du dev sehen (falls nicht, dann muss es aktualisiert werden). D.h. wenn du per git synchronisierst, dann sollte dieser Branch sich lokal bei dir befinden. Aber selbst wenn nicht, dann könntest du einen Rechtsklick auf den Branch machen und dann gibt’s da „Switch to branch“. Ist er bereits lokal, dann kannst du links unten über das environment einfach reinwechseln:
env

Ich muss zugeben, dass ich nicht weiß, was alles VSC nativ macht und wieviel davon Gitlens. Im Zweifelsfalle einfach Gitlens installieren :slight_smile:

Auf jeden Fall hast du am Ende sauber getrennte Branches und dann läuft der dev-Branch automatisch als „Arduino als Komponente“.

1 „Gefällt mir“

Nein nicht gedanklich für mich.
Ich wollte sichergehen, dass wirklich nichts von bisherigen Installationen dazwischenfunken kann.
Also Versuch absolut jungfräulichen Startzustand zu haben.

Zudem auch die Doku meines Vorganges um von euch checken zu können, dass ich das Build wirklich fresh clean durchgeführt habe.

Nebenbei habe ich mit Git nur für PlatformIO zu tun und das ist nur hobbymäßig und damit bescheiden!

1 „Gefällt mir“

Mal ne blöde Frage, müssten die Builds bei allen nicht immer gleich groß sein?

Bei mir:

RAM: [=== ] 30.6% (used 100108 bytes from 327680 bytes)
Flash: [=== ] 31.1% (used 2037097 bytes from 6553600 bytes)

Guter Punkt. Also komplett ohne Änderungen habe ich:

RAM: [=== ] 29.7% (used 97276 bytes from 327680 bytes)
Flash: [=== ] 30.9% (used 2025801 bytes from 6553600 bytes)

Mit Aktivierung von Port-Expander, PN5180 und INVERT-Power ist es so:

RAM: [=== ] 30.1% (used 98756 bytes from 327680 bytes)
Flash: [=== ] 31.2% (used 2046313 bytes from 6553600 bytes)

Hat jeder irgendwie andere Werte :thinking:

Also zwischen tueddy und meiner ist mindesten 1 commit dazwischen:
tueddy vom 2. Okt.
Meine vom 5. Oktober (9bd2ddc)

Edit:
Unterschiede z.B:

image

3 „Gefällt mir“

Der Unterschied kommt wohl durch die neu gepinnten Bibliotheken. Ansonsten sollte der Speicherbedarf bei gleichen Einstellungen überall identisch sein. Mir ging es beim Vergleich um den gesparten Speicher (sdkconfig.defaults)

1 „Gefällt mir“

Mein Fehler. Hab’ nicht dran gedacht, dass da noch ein Commit dazwischen war.
Wie auch immer: Man scheint’s „aus dem Stand“ kompilieren zu können :+1:. Das war mir wichtig.
Dann ist aus meiner Sicht nur noch der Punkt offen, dass @compactflash gemeldet hatte, dass das Ganze mit SPI-SD nicht läuft. Habe eben noch ein altes Board für den Lolin32 gefunden. Vielleicht nehme ich mich dem mal an.

2 „Gefällt mir“

Ich hatte vorgeschlagen es über ein neues Define NO_SDCARD zu lösen. Die ursprüngliche Funktionalität von SINGLE_SPI_ENABLE wird dann wiederhergestellt. Wenn’s OK ist könnte ich das einbauen…

1 „Gefällt mir“

Habe auch gerade mal die Dev-Branch getestet und festgestellt, dass beim scannen von Karten manchmal etwas schief geht und der ESP rebootet:

[ 106311 ]  RFID-Karte empfangen: 020036222052
[ 106315 ]  Gebe Speicher der alten Playlist frei.
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x40094e7e  PS      : 0x00060230  A0      : 0x80094fa6  A1      : 0x3ffd8950  
A2      : 0x3ffd8ebc  A3      : 0x00000000  A4      : 0x00000000  A5      : 0x0000000a  
A6      : 0x00000000  A7      : 0x00000000  A8      : 0x00000001  A9      : 0x3ffd8940  
A10     : 0x00000008  A11     : 0x3f402353  A12     : 0x3ff96355  A13     : 0x3ffd8960  
A14     : 0x3ffd88e0  A15     : 0x00000008  SAR     : 0x00000004  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000000  LBEG    : 0x400949cd  LEND    : 0x400949dd  LCOUNT  : 0xffffffff  


Backtrace: 0x40094e7b:0x3ffd8950 0x40094fa3:0x3ffd8980 0x400d8f3b:0x3ffd89a0 0x400d4817:0x3ffd8b00 0x400d8561:0x3ffd8c40 0x400e615c:0x3ffd8d90 0x4016b520:0x3ffd8db0

  #0  0x40094e7b:0x3ffd8950 in _strtoul_l at /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdlib/strtoul.c:148
  #1  0x40094fa3:0x3ffd8980 in strtoul at /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdlib/strtoul.c:216
  #2  0x400d8f3b:0x3ffd89a0 in SdCard_ReturnPlaylist(char const*, unsigned int) at src/SdCard.cpp:253
  #3  0x400d4817:0x3ffd8b00 in AudioPlayer_TrackQueueDispatcher(char const*, unsigned int, unsigned int, unsigned short) at src/AudioPlayer.cpp:924
  #4  0x400d8561:0x3ffd8c40 in Rfid_PreferenceLookupHandler() at src/RfidCommon.cpp:100
  #5  0x400e615c:0x3ffd8d90 in loop() at src/main.cpp:251
  #6  0x4016b520:0x3ffd8db0 in loopTask(void*) at /home/uwep/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:50