sidey79 / VS_Demo

Only a demo project
0 stars 0 forks source link

Travis Compileranweisung #1

Open spi43984 opened 4 years ago

spi43984 commented 4 years ago

Hallo Sidey,

ich habe jetzt deinen Beispielcode per git lokal gecloned. Könntest Du bitte eine travis.yml anlegen? VScode unterstützt wohl auch Travis - vielleicht ist das der einfachste Weg, den Code auszutauschen und zu kompilieren.

Auf die Idee sind wohl auch schon andere gekommen: https://headmelted.com/what-i-learned-building-code-that-builds-visual-studio-code-b520b1d83d0f

Viele Grüße, spi

sidey79 commented 4 years ago

Was soll die Travis Konfig machen?

Ich dachte es geht darum, dass wir herausfinden wir wir den Code ablegen, damit er mit VS Micro und VS Code compiliert werden kann.

Travis ist ja ein Continues Integration System, welches z.B. mittels Arduino IDE das Projekt compiliert.

spi43984 commented 4 years ago

Ja genau. Wenn ich das richtig sehe, stehen in der travis.yml die Befehle zum kompilieren. Und laut Travis soll es eben die Software Entwicklung auf verschiedenen Umgebungen ermöglichen. Wenn also mittels Travis der Code in beiden IDEs kompiliert werden kann, dann hätten wir schon gewonnen.

sidey79 commented 4 years ago

Ich bin nicht sicher, ob wir von dem gleichen sprechen.

Travis: https://docs.travis-ci.com/user/for-beginners/

Im SIGNALDuino Projekt liegt eine travis.yml https://github.com/RFD-FHEM/SIGNALDuino/blob/dev-r33/.travis.yml

Ich dachte, das verlinken der Ordner in eine Arduino IDE Kompatible Form reicht für VS Code nicht aus. ??

spi43984 commented 4 years ago

Das verlinken allein reicht nicht. Außerdem müsste es bei Änderungen überprüft und wiederholt werden. Das ist aufwändig und fehleranfällig.

Viele OpenSource Projekte haben die Herausforderung, dass die Entwickler unterschiedliche Platformen verwenden, aber die gleiche gemeinsame Codebasis nutzen wollen. Das was ich über Travis gelesen habe, scheint es auch zu leisten.

VScode kann auch Travis nutzen. Wenn wir also Code in irgendwelchen Dateien in irgendwelchen Ordner haben und Travis beschreibt eindeutig das Verfahren zum kompilieren, müsste es doch unabhängig der verwendeten Entwicklungsumgebung zum gleichen Ergebnis führen?

Ich gehen davon aus, dass du die travis.yml nicht manuell erstellt hast, sondern dein Visual Studio sie erstellt hat?

sidey79 commented 4 years ago

Also die travis.yml habe ich selbst erstellt. Das macht Visual Studio nicht automatisch. Da stehen vom Prinzip Bash Befehle. Ich weiss nicht so genau, wie dir travis helfen soll, wenn Du lokal compilieren möchtest.

spi43984 commented 4 years ago

Ich kenne Travis nicht. Und ich habe auch keine Erfahrung in der vernetzten Code-Entwicklung. Für mich gelten wie für viele andere auch folgende Rahmenbedingungen: 1) Bereitschaft, sich in ein Thema einzubringen 2) aber begrenzte Zeit 3) technisches Verständnis 4) Unwille, monotone Dinge zu wiederholen

Wenn wir den Code einfach nur austauschen, kann ich ihn nicht kompilieren. Durch Verschieben oder Verlinken kann ich den Compiler wenigstens starten, aber es hagelt Fehler, weil ich einen anderen Compiler mit anderen Settings verwende. D.h. ich müsste bei jeder Codeänderung erst einmal aufwändig eine compilierbare Fassung herstellen. Das verstösst gegen die Punkte 1 und 2 oben und erschwert die Codeentwicklung und Fehlersuche zusätzlich. Also brauche ich einen anderen Ansatz, um mich effektiv beteiligen zu können.

In der travis.yml habe ich Compileranweisungen gesehen (so wie in Makefiles) und von der Syntax erinnern die mich an Linux (es werden ja auch *.sh Skripte verwendet). Daher mein Gedanke, das zu nutzen.

Ein paar Gedanken und Fragen:

sidey79 commented 4 years ago

Hmm, ich weiss nicht so genau wie es andere gemacht haben. Ich glaube, die meisten haben es in eine Arduino IDE Kompatible Ablage gebracht.

Das Compilieren mittels TravisCI ist im SIGNALduino Projekt bereits umgesetzt. Das passiert bei jedem Pull Requests automatisch.

Allerdings kommst Du an das Compilierte Binary erst mal nicht dran, das müsste dann vorher irgendwo hin gespeichert werden.

Dass Visual Code einen anderen Compiliert verwendet kann ich mir auch nicht so ganz vorstellen. Ich hatte verstanden, dass die Compiliert Warnungen eher daraus resultieren, dass die Bibliotheken nicht gefunden werden.

Kannst Du die Fehlermeldungen teilen? Vielleicht verstehe ich dann eher woran wir arbeiten sollten.

spi43984 commented 4 years ago

Das wollte ich nochmal versuchen, die Arduino IDE als plugin in VScode einzubinden.

PlatformIO unter VScode verwendet eine andere Dateistruktur, daher Links bzw. Umkopieren. Wenn ich dev-r33_prepare_release per git hole, dien Dateien umkopiere, ein #include <Arduino.h> einfüge und in VScode für einen ESP8266 kompiliere, kommt z.B. folgender Fehler:

Processing esp8266 (platform: espressif8266; board: nodemcuv2; framework: arduino) Verbose mode can be enabled via "-v, --verbose" option CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/nodemcuv2.html PLATFORM: Espressif 8266 2.2.3 > NodeMCU 1.0 (ESP-12E Module) HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash PACKAGES: toolchain-xtensa 2.40802.190218 (4.8.2), framework-arduinoespressif8266 2.20502.0 (2.5.2), tool-esptool 1.413.0 (4.13), tool-esptoolpy 1.20600.0 (2.6.0) LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 40 compatible libraries Scanning dependencies... Dependency Graph |-- <ArduinoJson> 6.12.0 |-- <ESP8266WiFi> 1.0 |-- <ESP8266WebServer> 1.0 | |-- <ESP8266WiFi> 1.0 |-- <fastdelegate> 1.0.0 |-- <SimpleFIFO> 1.0.0 |-- <TimerOne> 1.0.0 |-- <bitstore> 1.1.0 |-- <output> 1.0.1 | |-- <ESP8266WiFi> 1.0 |-- <signaldecoder> 1.1.0 | |-- <fastdelegate> 1.0.0 | |-- <bitstore> 1.1.0 | |-- <output> 1.0.1 | | |-- <ESP8266WiFi> 1.0 | |-- <ESP8266WiFi> 1.0 |-- <EEPROM> 1.0 |-- <SPI> 1.0 |-- <WifiManager> 1.0.0 | |-- <DNSServer> 1.1.1 | | |-- <ESP8266WiFi> 1.0 | |-- <ESP8266WebServer> 1.0 | | |-- <ESP8266WiFi> 1.0 | |-- <ESP8266WiFi> 1.0 | |-- <ESP8266mDNS> 1.2 | | |-- <ESP8266WiFi> 1.0 Linking .pio/build/esp8266/firmware.elf /home/sp/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .pio/build/esp8266/libFrameworkArduino.a(core_esp8266_main.cpp.o):(.text._ZL12loop_wrapperv+0x4): undefined reference to "setup" /home/sp/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .pio/build/esp8266/libFrameworkArduino.a(core_esp8266_main.cpp.o):(.text._ZL12loop_wrapperv+0x8): undefined reference to "loop" /home/sp/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .pio/build/esp8266/libFrameworkArduino.a(core_esp8266_main.cpp.o): in function "loop_wrapper()": core_esp8266_main.cpp:(.text._ZL12loop_wrapperv+0x21): undefined reference to "setup" /home/sp/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: core_esp8266_main.cpp:(.text._ZL12loop_wrapperv+0x2d): undefined reference to "loop" collect2: error: ld returned 1 exit status *** [.pio/build/esp8266/firmware.elf] Error 1

Das ist wohl dem #if defined(__AVR__) am Anfang und dem #endif erst am Ende geschuldet - da findet er wohl setup und loop nicht. Wenn ich beide Präprozessor-Anweisungen auskommentiere, sieht der Fehler aus wie folgt:

Processing esp8266 (platform: espressif8266; board: nodemcuv2; framework: arduino) Verbose mode can be enabled via "-v, --verbose" option CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/nodemcuv2.html PLATFORM: Espressif 8266 2.2.3 > NodeMCU 1.0 (ESP-12E Module) HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash PACKAGES: toolchain-xtensa 2.40802.190218 (4.8.2), framework-arduinoespressif8266 2.20502.0 (2.5.2), tool-esptool 1.413.0 (4.13), tool-esptoolpy 1.20600.0 (2.6.0) LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 40 compatible libraries Scanning dependencies... Dependency Graph |-- <ArduinoJson> 6.12.0 |-- <ESP8266WiFi> 1.0 |-- <ESP8266WebServer> 1.0 | |-- <ESP8266WiFi> 1.0 |-- <fastdelegate> 1.0.0 |-- <SimpleFIFO> 1.0.0 |-- <TimerOne> 1.0.0 |-- <bitstore> 1.1.0 |-- <output> 1.0.1 | |-- <ESP8266WiFi> 1.0 |-- <signaldecoder> 1.1.0 | |-- <fastdelegate> 1.0.0 | |-- <bitstore> 1.1.0 | |-- <output> 1.0.1 | | |-- <ESP8266WiFi> 1.0 | |-- <ESP8266WiFi> 1.0 |-- <EEPROM> 1.0 |-- <SPI> 1.0 |-- <WifiManager> 1.0.0 | |-- <DNSServer> 1.1.1 | | |-- <ESP8266WiFi> 1.0 | |-- <ESP8266WebServer> 1.0 | | |-- <ESP8266WiFi> 1.0 | |-- <ESP8266WiFi> 1.0 | |-- <ESP8266mDNS> 1.2 | | |-- <ESP8266WiFi> 1.0 Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/BearSSLHelpers.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/CertStoreBearSSL.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/ESP8266WiFi.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/ESP8266WiFiAP.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/ESP8266WiFiGeneric.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/ESP8266WiFiMulti.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/ESP8266WiFiSTA-WPS.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/ESP8266WiFiSTA.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/ESP8266WiFiScan.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/WiFiClient.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/WiFiClientSecureAxTLS.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/WiFiClientSecureBearSSL.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/WiFiServer.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/WiFiServerSecureAxTLS.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/WiFiServerSecureBearSSL.cpp.o Compiling .pio/build/esp8266/lib7db/ESP8266WiFi/WiFiUdp.cpp.o Compiling .pio/build/esp8266/lib110/ESP8266WebServer/ESP8266WebServer.cpp.o Compiling .pio/build/esp8266/lib110/ESP8266WebServer/ESP8266WebServerSecureAxTLS.cpp.o Compiling .pio/build/esp8266/lib110/ESP8266WebServer/ESP8266WebServerSecureBearSSL.cpp.o Compiling .pio/build/esp8266/lib110/ESP8266WebServer/Parsing.cpp.o Compiling .pio/build/esp8266/lib110/ESP8266WebServer/detail/mimetable.cpp.o Compiling .pio/build/esp8266/libf09/SimpleFIFO/SimpleFIFO.cpp.o Compiling .pio/build/esp8266/lib20b/TimerOne/TimerOne.cpp.o Compiling .pio/build/esp8266/libb19/bitstore/bitstore.cpp.o Compiling .pio/build/esp8266/lib8d4/signalDecoder/signalDecoder.cpp.o Compiling .pio/build/esp8266/lib798/EEPROM/EEPROM.cpp.o Compiling .pio/build/esp8266/libef7/SPI/SPI.cpp.o Compiling .pio/build/esp8266/libe0c/DNSServer/DNSServer.cpp.o Compiling .pio/build/esp8266/lib065/ESP8266mDNS/ESP8266mDNS.cpp.o Compiling .pio/build/esp8266/lib065/ESP8266mDNS/ESP8266mDNS_Legacy.cpp.o Compiling .pio/build/esp8266/lib065/ESP8266mDNS/LEAmDNS.cpp.o In file included from lib/signalDecoder/src/signalDecoder.h:78:0, from lib/signalDecoder/src/signalDecoder.cpp:31: lib/fastdelegate/src/FastDelegate.h: In function "OutputClass fastdelegate::detail::horrible_cast(InputClass)": lib/fastdelegate/src/FastDelegate.h:181:16: warning: typedef "ERROR_CantUseHorrible_cast" locally defined but not used [-Wunused-local-typedefs] typedef int ERROR_CantUseHorrible_cast[sizeof(InputClass) == sizeof(u) ^ lib/fastdelegate/src/FastDelegate.h: In static member function "static fastdelegate::detail::GenericClass* fastdelegate::detail::SimplifyMemFunc<N>::Convert(X*, XFuncType, GenericMemFuncType&)": lib/fastdelegate/src/FastDelegate.h:299:18: warning: typedef "ERROR_Unsupported_member_function_pointer_on_this_compiler" locally defined but not used [-Wunused-local-typedefs] typedef char ERROR_Unsupported_member_function_pointer_on_this_compiler[N - 100]; ^ lib/fastdelegate/src/FastDelegate.h: In member function "void fastdelegate::detail::ClosurePtr<GenericMemFunc, StaticFuncPtr, UnvoidStaticFuncPtr>::bindstaticfunc(DerivedClass*, ParentInvokerSig, StaticFuncPtr)": lib/fastdelegate/src/FastDelegate.h:792:17: warning: typedef "ERROR_CantUseEvilMethod" locally defined but not used [-Wunused-local-typedefs] typedef int ERROR_CantUseEvilMethod[sizeof(GenericClass *) == sizeof(function_to_bind) ? 1 : -1]; ^ lib/fastdelegate/src/FastDelegate.h: In member function "UnvoidStaticFuncPtr fastdelegate::detail::ClosurePtr<GenericMemFunc, StaticFuncPtr, UnvoidStaticFuncPtr>::GetStaticFunction() const": lib/fastdelegate/src/FastDelegate.h:809:17: warning: typedef "ERROR_CantUseEvilMethod" locally defined but not used [-Wunused-local-typedefs] typedef int ERROR_CantUseEvilMethod[sizeof(UnvoidStaticFuncPtr) == sizeof(this) ? 1 : -1]; ^ Compiling .pio/build/esp8266/lib065/ESP8266mDNS/LEAmDNS_Control.cpp.o Compiling .pio/build/esp8266/lib065/ESP8266mDNS/LEAmDNS_Helpers.cpp.o Compiling .pio/build/esp8266/lib065/ESP8266mDNS/LEAmDNS_Structs.cpp.o Compiling .pio/build/esp8266/lib065/ESP8266mDNS/LEAmDNS_Transfer.cpp.o Compiling .pio/build/esp8266/lib2f6/WIFIManager/WiFiManager.cpp.o Compiling .pio/build/esp8266/src/cc1101.cpp.o Compiling .pio/build/esp8266/src/main.cpp.o Generating LD script .pio/build/esp8266/ld/local.eagle.app.v6.common.ld Archiving .pio/build/esp8266/libFrameworkArduinoVariant.a Indexing .pio/build/esp8266/libFrameworkArduinoVariant.a Compiling .pio/build/esp8266/FrameworkArduino/Esp-frag.cpp.o Compiling .pio/build/esp8266/FrameworkArduino/Esp-version.cpp.o Compiling .pio/build/esp8266/FrameworkArduino/Esp.cpp.o Compiling .pio/build/esp8266/FrameworkArduino/FS.cpp.o Compiling .pio/build/esp8266/FrameworkArduino/FunctionalInterrupt.cpp.o Compiling .pio/build/esp8266/FrameworkArduino/HardwareSerial.cpp.o In file included from src/main.cpp:68:0: lib/fastdelegate/src/FastDelegate.h: In function "OutputClass fastdelegate::detail::horrible_cast(InputClass)": lib/fastdelegate/src/FastDelegate.h:181:16: warning: typedef "ERROR_CantUseHorrible_cast" locally defined but not used [-Wunused-local-typedefs] typedef int ERROR_CantUseHorrible_cast[sizeof(InputClass) == sizeof(u) ^ lib/fastdelegate/src/FastDelegate.h: In static member function "static fastdelegate::detail::GenericClass* fastdelegate::detail::SimplifyMemFunc<N>::Convert(X*, XFuncType, GenericMemFuncType&)": lib/fastdelegate/src/FastDelegate.h:299:18: warning: typedef "ERROR_Unsupported_member_function_pointer_on_this_compiler" locally defined but not used [-Wunused-local-typedefs] typedef char ERROR_Unsupported_member_function_pointer_on_this_compiler[N - 100]; ^ lib/fastdelegate/src/FastDelegate.h: In member function "void fastdelegate::detail::ClosurePtr<GenericMemFunc, StaticFuncPtr, UnvoidStaticFuncPtr>::bindstaticfunc(DerivedClass*, ParentInvokerSig, StaticFuncPtr)": lib/fastdelegate/src/FastDelegate.h:792:17: warning: typedef "ERROR_CantUseEvilMethod" locally defined but not used [-Wunused-local-typedefs] typedef int ERROR_CantUseEvilMethod[sizeof(GenericClass *) == sizeof(function_to_bind) ? 1 : -1]; ^ lib/fastdelegate/src/FastDelegate.h: In member function "UnvoidStaticFuncPtr fastdelegate::detail::ClosurePtr<GenericMemFunc, StaticFuncPtr, UnvoidStaticFuncPtr>::GetStaticFunction() const": lib/fastdelegate/src/FastDelegate.h:809:17: warning: typedef "ERROR_CantUseEvilMethod" locally defined but not used [-Wunused-local-typedefs] typedef int ERROR_CantUseEvilMethod[sizeof(UnvoidStaticFuncPtr) == sizeof(this) ? 1 : -1]; ^ Compiling .pio/build/esp8266/FrameworkArduino/IPAddress.cpp.o Compiling .pio/build/esp8266/FrameworkArduino/MD5Builder.cpp.o src/main.cpp: In function "void setup()": src/main.cpp:135:9: error: "class TimerOne" has no member named "initialize" Timer1.initialize(32001); //Interrupt wird jede 32001 Millisekunden ausgeloest ^ src/main.cpp:136:9: error: "class TimerOne" has no member named "attachInterrupt" Timer1.attachInterrupt(cronjob); ^ src/main.cpp: In function "void cronjob()": src/main.cpp:168:9: error: "class TimerOne" has no member named "setPeriod" Timer1.setPeriod(32001); ^ src/main.cpp:178:10: error: "class TimerOne" has no member named "setPeriod" Timer1.setPeriod(maxPulse-duration+16); ^ src/main.cpp: In function "size_t writeCallback(const uint8_t*, uint8_t)": src/main.cpp:212:57: error: default argument given for parameter 2 of "size_t writeCallback(const uint8_t*, uint8_t)" [-fpermissive] size_t writeCallback(const uint8_t *buf, uint8_t len = 1) ^ src/main.cpp:63:8: error: after previous specification in "size_t writeCallback(const uint8_t*, uint8_t)" [-fpermissive] size_t writeCallback(const uint8_t *buf, uint8_t len = 1); ^ *** [.pio/build/esp8266/src/main.cpp.o] Error 1

Solange die Toolchain nicht identisch ist, würden wir viel Zeit mit Fehlersuche verschwenden. Für den ESP32 sieht das ganze noch wilder aus.

sidey79 commented 4 years ago

In welchem Branch hast du denn das #if defined(AVR) gefunden?

Ich könnte das auf Anhieb nicht finden.

So wie ich das einschätze klappt ja aber noch nicht mal das compilieren des Projektes im Master, welches keine eigenen Bibliotheken beinhaltet.

spi43984 commented 4 years ago

Sh... Mein Fehler, habe jetzt erst gesehen, dass ich den Inhalt der SIGNALDuino.ino in mein main.cpp kopiert habe und nicht den der SIGNALESP.ino. Habe das jetzt korrigiert.

Den Branch dev-r33_prepare_release bekomme ich jetzt kompiliert, dazu muss ich ein #include <Arduino.h> gleich hinter #if defined (ESP32) || defined(ESP8266) einfügen. Dann habe ich einige Dateien umkopiert. Ich werde versuchen, ob sich das

  1. per Links oder
  2. eine alternative Config

richten lässt.

sidey79 commented 4 years ago

Ach, Du versuchst weiterhin das SIGNALDuino Projekt zu compilieren.

Ich dachte, dass wir es erst mal an dem minimal Projekt versuchen und uns dann langsam steigern.

spi43984 commented 4 years ago

Alles gut. Das mache ich parallel. Hatte nur in dem ursprünglichen SIGNALESP die travis.yml gefunden und die hatte mich auf die zuvor diskutierte Idee gebracht. Zurück zu dem Minimalprojekt:

  1. Ich habe per git von VS_Demo den Branch local_lib geholt.
  2. Darin die Verzeichnisse lib und src angelegt.
  3. In lib habe ich ausgeführt ln -s ../Libraries/RunningAverage/0.0.0/RunningAverage.
  4. In src habe ich ausgeführt ln -s ../VS_Demo.ino main.cpp.
  5. Direkt im Verzeichnis habe ich die Datei platformio.ini angelegt mit folgendem Inhalt
;PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[platformio]
default_envs = esp8266
; default_envs = esp32dev

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
upload_port = /dev/ttyUSB0
upload_speed = 921600
monitor_port = /dev/ttyUSB0
monitor_speed = 115200
lib_deps =

[env:esp8266]
platform = espressif8266
board = nodemcuv2
framework = arduino
upload_port = /dev/ttyUSB0
upload_speed = 115200
monitor_port = /dev/ttyUSB0
monitor_speed = 115200
lib_deps =

Damit lässt sich der Code sowohl für ESP32 als auch ESP8266 kompilieren. Tata.

spi43984 commented 4 years ago

Habe einen git push gemacht. Schauen wir mal...

sidey79 commented 4 years ago

Cool. Vermutlich kannst Du dir den Link zu den Libs auch sparen, indem Du den Pfad in der plattformio.ini angibst:

http://docs.platformio.org/en/latest/projectconf/section_env_library.html#lib-extra-dirs

Die SIGNALduino.ino brauchst Du allerdings schon. Das scheint das blödeste zu sein, dass Plattformio die ino Dateien nicht berücksichtigt.

spi43984 commented 4 years ago

Ja, ich werde noch die Arduino IDE extension für VScode testen. Ich finde aber platformIO viel cooler zum Weitergeben, da die Boards/Libs etc. lokal konfiguriert werden. Werde auch mit der platformio.ini noch rumspielen. Vielleicht hilft https://docs.platformio.org/en/latest/projectconf/section_env_build.html#src-filter

spi43984 commented 4 years ago

Der Parameter lib_extra_dirs funktioniert, es muss kein lib Verzeichnis erstellt und verlinkt werden. Du hast nur die Library in einem eigenen Verzeichnis unter Libraries/RunningAverage/0.0.0/ abgelegt - sie sollte aber in einem eigenen Verzeichnis direkt unter Libraries liegen.

Ich habe noch keinen Weg gefunden, die VS_Demo.ino zu kompilieren. Hier werden tatsächlich in dem src-Verzeichnis *.cpp Dateien erwartet.

Die platformio.ini sieht jetzt so aus:

;PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[platformio]
; default_envs = esp8266
default_envs = esp32dev

[env]
lib_extra_dirs =
    Libraries/RunningAverage/0.0.0

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
upload_port = /dev/ttyUSB0
upload_speed = 921600
monitor_port = /dev/ttyUSB0
monitor_speed = 115200
lib_deps =

[env:esp8266]
platform = espressif8266
board = nodemcuv2
framework = arduino
upload_port = /dev/ttyUSB0
upload_speed = 115200
monitor_port = /dev/ttyUSB0
monitor_speed = 115200
lib_deps =
spi43984 commented 4 years ago

Konnte Branch dev-r33_prepare_release erfolgreich kompilieren für einen ESP32 - brauche jetzt noch einen weiteren cc1101-Tranceiver für Tests.

image

Habe solch einen: https://www.makershop.de/module/funk/cc1101-433mhz/ - kannst Du einen mit besserer (aber immer noch kleiner) Antenne empfehlen?

sidey79 commented 4 years ago

Bezüglich des compilierens von .ino Dateien scheint es durchaus möglich zurück sein.

Das ESPEasy Projekt hat etliche .ino Dateien und verwendet auch Plattformio.

Ich konnte nur feststellen, dass die .ino Dateien dort im src Ordner liegen. Mehr leider nicht.

Was den cc1101 angeht, kann ich leider nichts emofehlen. Ich habe die bisher immer in China geordert. :)

spi43984 commented 4 years ago

Werde das mit den ino Dateien im src folder testen.

Kannst Du den Code compilieren, wenn die Links und Verzeichnisse enthalten sind? Oder stört das deinen Compiler?

sidey79 commented 4 years ago

Ich bin nicht sicher, ob sich symbolische Links über git verwalten lassen.

Ich schätze, das wird nicht gehen.

spi43984 commented 4 years ago

Kannst Du bitte mal den letzten gut Push von mir prüfen? Ich meine, da sind die Links drin.

spi43984 commented 4 years ago

Bezüglich des compilierens von .ino Dateien scheint es durchaus möglich zurück sein.

Das ESPEasy Projekt hat etliche .ino Dateien und verwendet auch Plattformio.

Ich konnte nur feststellen, dass die .ino Dateien dort im src Ordner liegen. Mehr leider nicht.

Läuft, wenn ich nur auf die ino-Datei aus dem src-Folder verlinke, lässt die sich auch compilieren. cpp-Endung hat den Vorteil, dass VScode nicht wegen Syntax-Highlighting meckert.

Bin gespannt, ob die Links in deinem Compiler Fehler werfen...

sidey79 commented 4 years ago

Also ich muss sagen, ich bin positiv überrascht. Die Symlinks, welche Du unter Linux gesetzt hast, funktionieren auch unter Windows. Das habe ich git nicht zugetraut. Super!

Die main.cpp darf ich bei mir in der IDE nicht hinterlegen, sonst meckert er bezüglich doppelter Dekaration. Aber das ist ja auch nicht nötig, da der Inhalt mit der .ino Datei identisch ist.

Das mit dem Lib Ordner "Libraries\RunningAverage\0.0.0" passt so vermutlich nicht für VS Code, da es mit dem 0.0.0 nichts anfangen kann. Das kann man bei Visual Micro aber weglassen. Das ist eine Option um mehrere Versionsstände einer Bibliothek ablegen zu können.

Mich würde jetzt noch interessieren wie dein Symlink zu main.cpp mit zwei .ino Dateien klar kommt. Was muss angepasst werden, damit die Bibliothek durch lib_extra_dirs gefunden wird?

spi43984 commented 4 years ago

Mit mehreren ino-Dateien wäre das Vorgehen

Das sollten wir aber testen.

lib_extra_dirs

;PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[platformio]
; default_envs = esp8266
default_envs = esp32dev

[env]
lib_extra_dirs =
    Libraries/RunningAverage/0.0.0

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
upload_port = /dev/ttyUSB0
upload_speed = 921600
monitor_port = /dev/ttyUSB0
monitor_speed = 115200
lib_deps =

[env:esp8266]
platform = espressif8266
board = nodemcuv2
framework = arduino
upload_port = /dev/ttyUSB0
upload_speed = 115200
monitor_port = /dev/ttyUSB0
monitor_speed = 115200
lib_deps =

lib_extra_dirs zeigt auf den übergeordneten Folder, in dem die Libraries in einzelnen Ordnern abgelegt sind. Da in dem Beispiel RunningAverage so tief geschachtelt ist, ist das unschön. Hier gibt es mehrere Möglichkeiten:

  1. tatsächlich auf die Versionsnummer verzichten, so dass die Ordnerstruktur Libraries/RunningAverage, Libraries/andereLib1, etc. aussieht - in diesem Fall setzt man lib_extra_dirs nur auf den übergeordneten Folder Libraries, also lib_extra_dirs = Libraries

  2. wenn tief geschachtelte Verzeichnisse für Libraries verwendet werden, muss für jedes übergeordnete Verzeichnis ein Eintrag in lib_extra_dirs angelegt werden, in diesem Fall also lib_extra_dirs = Libraries/RunningAverage/0.0.0 Libraries/andereLib1 Libraries/andereLib2/1.2.3

Nr. 1. ist schön, 2. nicht so.

Die platformio.ini oben hat die Einstellungen für einen esp8266 und esp32. Das kann bequem am Anfang umgeschaltet werden (default_envs entsprechend auskommentieren). Der [env] Block definiert die Defaults für beide Umgebungen. Da könnte man sicher noch einiges zusammenfassen oder auch weitere Boards ergänzen, aber in der Regel unterscheiden sich die Boards so, dass es sinnvoller ist, die Unterscheidungen (z.B. upload_speed, lib_deps etc.) bei den einzelnen Boards zu treffen.

Wärst Du denn bereit, die Links und die platformio.ini in github zu hinterlegen? Mit einer kleinen Erklärung zum Compilieren könnten wir dann auch allen zeigen, wie es mit Visual Studio unter Windows oder VScode (unter was auch immer) zu compilieren ist.

sidey79 commented 4 years ago

Es gibt zwei ino Dateien. Die könnte man ja verlinken.

Anpassung des lib Verzeichnisses können wir machen. Die Versionsnummer entfernen wir.

Die Plattformio.ini können wir dann gerne hinterlegen, wenn wir unseren Test hier beendet haben

spi43984 commented 4 years ago

Es gibt zwei ino Dateien. Die könnte man ja verlinken.

Das ist jetzt doch etwas schwierig, weil das je eine DAtei für zwei unterschiedliche Boards ist. Ggs. geht das, wenn man sie beide unter dem Originalnamen.cpp verlinkt - muss ich testen.

Anpassung des lib Verzeichnisses können wir machen. Die Versionsnummer entfernen wir.

Prima Die Plattformio.ini können wir dann gerne hinterlegen, wenn wir unseren Test hier beendet haben Prima2

sidey79 commented 4 years ago

Irgendwie scheint es ja bei espeasy zu gehen mehrere .ino Dateien im src Verzeichnis:

https://github.com/letscontrolit/ESPEasy/tree/mega/src

spi43984 commented 4 years ago

Kennst Du jemanden aus dem ESPEasy-Projekt? Die machen da ein paar echt coole Sachen bzgl. mehreren ino/cpp-Files, unterschiedlichen Boards in platformio.ini etc.

Ich habe einen neuen Branch erstellt auf github: multiple-ino-files

Dort sind zwei ino-Dateien, jeweils eine für einen ESP32 und ESP8266. Je nachdem, was in platformio.ini ausgewählt ist, wird es entsprechend kompiliert. Ich bin mir noch nicht sicher, ob das auch so sauber funktioniert, da aktuell einfach in jeder Datei per #ifndef das Board abgefragt wird. Ggf. muss man auch die richtige ino-Datei öffnen und dort das Kompilieren anstossen, da sonst beide Dateien kompiliert werden - auch wenn die eine dann tatsächlich keine Anweisungen enthält.

Schöner wäre es, wenn in der platformio.ini die ino-Datei(en) stehen würde(n), die je Board zu kompilieren sind. Vielleicht hat das ESPEasy-Projekt einen Tipp, wie man das sauber in platformio.ini abbilden kann. Habe dazu src_filter getestet, lief aber auf die schnelle nicht, etwas in der Art

src_filter =
    +<VS_Demo.ino*>
    -<VS_Demo_esp32.ino*>

für den ESP8266. Vielleicht klappt das auch nur, wenn man unterhalb von src Unterverzeichnisse für die unterschiedlichen Plattformen macht, also src/esp32, src/esp8266, src/arduino etc.

Oder man definiert eine führende ino/cpp-Datei, die je nach Board die eine oder andere ino-Datei einbindet.

sidey79 commented 4 years ago

Nur damit wir uns nicht falsch Verstehen. Für das SIGNALDuino Repo muss SIGNALDuino.ino immer compiliert wird. Im Falle eines ESP muss dann Zusätzlich noch die SIGNALESP.ino compiliert werden.

Ich habe im ESPEasy Projekt nicht gefunden, das scheint mehr oder weniger einfach zu gehen.

spi43984 commented 4 years ago

Dann ist es ja noch einfacher, weil VScode alle src-Files kompiliert. Hatte in Erinnerung, dass Signalduino auf AVR testet und wenn nicht definiert, den meisten Teil ausblendet.

Wie funktioniert der letzte git commit in deinem Compiler? Wirft er Fehler?

sidey79 commented 4 years ago

Dein letzter Commit compiliert den esp8266 . Damit esp32 auch compiliert musste ich nur VS_Demo_esp32.ino noch mit in mein Projekt aufnehmen.

Ich habe die Lib jetzt in das Standard VZ verschoben und VS_Demo_esp32.ino / VS_Demo.ino so angepasst, dass erkennbar ist, ob beide vom compiler berücksichtigt werden. Der esp32 sollte sich nur compilieren lassen, wenn auch die andere Datei geladen wird.

spi43984 commented 4 years ago

Mit dieser Änderung kann ich für den ESP8266 kompilieren, nicht aber für den ESP32 - er bindet die Library RunningAverage.h nicht ein und wirft damit folgenden Fehler

/home/sp/Documents/PlatformIO/Projects/VS_Demo_lokal_platformio/src/VS_Demo_esp32.ino:9:1: error: 'RunningAverage' does not name a type
 RunningAverage avgCounter(5);
 ^
/home/sp/Documents/PlatformIO/Projects/VS_Demo_lokal_platformio/src/VS_Demo_esp32.ino: In function 'void setup()':
/home/sp/Documents/PlatformIO/Projects/VS_Demo_lokal_platformio/src/VS_Demo_esp32.ino:17:2: error: 'avgCounter' was not declared in this scope
  avgCounter.addValue(3);
  ^
*** [.pio/build/esp32dev/src/VS_Demo_esp32.ino.cpp.o] Error 1

Was komisch ist, dass wenn ich in platformio.ini den ESP8266 auswähle, trotzdem VS_Demo_esp32.ino kompiliert wird und von VS_Demo.ino keine Spur ist.

Processing esp8266 (platform: espressif8266; board: nodemcuv2; framework: arduino)
------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/nodemcuv2.html
PLATFORM: Espressif 8266 2.2.3 > NodeMCU 1.0 (ESP-12E Module)
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES: toolchain-xtensa 2.40802.190218 (4.8.2), framework-arduinoespressif8266 2.20502.0 (2.5.2), tool-esptool 1.413.0 (4.13), tool-esptoolpy 1.20600.0 (2.6.0)
Converting VS_Demo_esp32.ino
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 29 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <RunningAverage>
Compiling .pio/build/esp8266/src/VS_Demo_esp32.ino.cpp.o
Generating LD script .pio/build/esp8266/ld/local.eagle.app.v6.common.ld
Compiling .pio/build/esp8266/lib2fa/RunningAverage/RunningAverage.cpp.o
Archiving .pio/build/esp8266/libFrameworkArduinoVariant.a
Indexing .pio/build/esp8266/libFrameworkArduinoVariant.a
Compiling .pio/build/esp8266/FrameworkArduino/Esp-frag.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/Esp-version.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/Esp.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/FS.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/FunctionalInterrupt.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/IPAddress.cpp.o
Archiving .pio/build/esp8266/lib2fa/libRunningAverage.a
Compiling .pio/build/esp8266/FrameworkArduino/MD5Builder.cpp.o
Indexing .pio/build/esp8266/lib2fa/libRunningAverage.a
Compiling .pio/build/esp8266/FrameworkArduino/Print.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/Schedule.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/ScheduledFunctions.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/StackThunk.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/StreamString.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/Updater.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/WString.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/abi.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/base64.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/cbuf.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/cont.S.o
Compiling .pio/build/esp8266/FrameworkArduino/cont_util.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_app_entry_noextra4k.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_eboot_command.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_flash_utils.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_i2s.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_main.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_noniso.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_phy.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_postmortem.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_si2c.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_sigma_delta.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_timer.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_waveform.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_wiring.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_wiring_analog.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_wiring_digital.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_wiring_pulse.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_wiring_pwm.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/core_esp8266_wiring_shift.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/debug.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/gdb_hooks.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/heap.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/libb64/cdecode.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/libb64/cencode.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/libc_replacements.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/sntp-lwip2.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/spiffs/spiffs_cache.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/spiffs/spiffs_check.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/spiffs/spiffs_gc.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/spiffs/spiffs_hydrogen.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/spiffs/spiffs_nucleus.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/spiffs_api.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/spiffs_hal.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/sqrt32.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/time.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/uart.cpp.o
Compiling .pio/build/esp8266/FrameworkArduino/umm_malloc/umm_malloc.cpp.o
Archiving .pio/build/esp8266/libFrameworkArduino.a
Indexing .pio/build/esp8266/libFrameworkArduino.a
Linking .pio/build/esp8266/firmware.elf
Retrieving maximum program size .pio/build/esp8266/firmware.elf
Building .pio/build/esp8266/firmware.bin
Checking size .pio/build/esp8266/firmware.elf
Memory Usage -> http://bit.ly/pio-memory-usage
DATA:    [===       ]  32.6% (used 26716 bytes from 81920 bytes)
PROGRAM: [===       ]  25.2% (used 263716 bytes from 1044464 bytes)
Creating BIN file ".pio/build/esp8266/firmware.bin" using ".pio/build/esp8266/firmware.elf"
===================== [SUCCESS] Took 6.08 seconds =====================

Environment    Status    Duration
-------------  --------  ------------
esp32dev       IGNORED
esp8266        SUCCESS   00:00:06.083
===================== 1 succeeded in 00:00:06.083 =====================

Es läuft aber durch ohne Probleme. Da ich keinen ESP8266 mehr frei habe, kann ich das Kompilat nicht testen. Ich habe die Änderungen aber symmetrisch dür den ESP32 durchgeführt (also dort das #include und loop{} eingefügt und dafür in VS_Demo.ino entfernt). Jetzt kann ich für beide compilieren. Es sieht so aus, als würde er die src-Files in alphabetischer Reihenfolge abarbeiten.

Ich habe im nächsten Schritt die Änderungen rückgängig gemacht und dafür die Links anders benannt (damit er die VS_Demo.ini zuerst kompikiert, nämlich

01_VS_Demo.ino -> ../VS_Demo.ino
02_VS_Demo_esp32.ino -> ../VS_Demo_esp32.ino

Ändert aber nichts, für den ESP8266 lässt es sich kompilieren (in der Ausgabe steht aber immer noch Compiling .pio/build/esp8266/src/02_VS_Demo_esp32.ino.cpp.o), für den ESP32 nicht. VScode kompiliert das nur sauber, wenn #include und loop{} in der ESP32-Datei drin sind. Komisch. Ich suche weiter.

Habe weiter gesucht und das gefunden: http://cse230.artifice.cc/lecture/splitting-code.html https://www.visualmicro.com/page/User-Guide.aspx?doc=INOs-and-CPPs.html https://community.platformio.org/t/tutorial-for-creating-multi-cpp-file-arduino-project/5830/17

Kurze Zusammenfassung: Arduino IDE kompiliert alle ino-Files, indem es zuerst alles in ein ino-File packt. Die Reihenfolge der Definitionen in den einzelnen Dateien ist egal. Das ist einsteigerfreundlich, aber bei komplexen Projekten nicht ideal.

VScode macht das nicht. Es kompiliert auch nicht alle ino-/cpp-Dateien, so dass es nicht alle Definitionen und Deklarationen findet. Statt dessen muss man mit #includes arbeiten. Ausgangspunkt ist eine main.cpp. Ich habe unser Beispiel angepasst und lade es gleich hoch auf github. Ich binde dort in der main.cpp (main.cpp -> ../VS_Demo.ino) die VS_Demo_esp32.ino ein (per #include "../VS_Demo_esp32.ino"). Nicht schön, aber es funktioniert. Die VS_Demo_esp32.ino muss auch nicht mehr in src liegen oder von dort verlinkt sein.

Dieser Ansatz ist aber vermutlich schwierig für SIGNALduino. Hast Du noch eine andere Idee? Aber halt, wenn ich mir die SIGNALduino anschaue, steht dort

#include "compile_config.h"

#define PROGVERS               "3.3.1-RC-nightly"
#define VERSION_1               0x33
#define VERSION_2               0x1d

#if defined(__AVR__)
#define PROGNAME               " SIGNALduino "
...
#endif

Das #endif ist ganz am Ende. Damit ist das ganze für den ESP32 irrelevant - oder sehe ich hier etwas falsch?

sidey79 commented 4 years ago

Ich habe da jetzt keine Idee. Ich verstehe nicht, wie das beim ESPEasy Projekt funktioniert. Da gibt es ja bestimmt 100 .ino Dateien die alle berücksichtigt werden müssen.

Deine Annahme ist weitgehend korrekt. was das #if defined(AVR) und #endif angeht. Vor dem #if defined(AVR) stehen aber ein paar allgemeingültige Daten. Daher wäre es schon gut, wenn alle .ino Datein berücksichtigt werden

spi43984 commented 4 years ago

Ich habe da jetzt keine Idee. Ich verstehe nicht, wie das beim ESPEasy Projekt funktioniert. Da gibt es ja bestimmt 100 .ino Dateien die alle berücksichtigt werden müssen.

Scheinbar gibt's da aber auch Probleme, da sie von ino-Files auf h/cpp umstellen. Aus der Doku: "We are currently working on converting the core ESPeasy code from .ino files into .h/.cpp files. (see PR #2617 and issue #2621)"

Bei ESPEasy ist ESPEasy.ino die zentrale Datei - die wird zum Compilieren ausgewählt und beinhaltet alle nötigen includes. Damit werden wohl die anderen ino-Dateien eingebunden (die von platformIO vor dem Kompilieren in cpp-Dateien gewandelt werden).

Ich kann ESPEasy klonen und auf einen Klick compilieren. PlatformIO holt automatisch alle nötigen Libraries in der richtigen Version.

Deine Annahme ist weitgehend korrekt. was das #if defined(AVR) und #endif angeht. Vor dem #if defined(AVR) stehen aber ein paar allgemeingültige Daten. Daher wäre es schon gut, wenn alle .ino Datein berücksichtigt werden

Wäre es eine Alternative, die Definitionen in ein Header-Fiel auszulagern? Und je nachdem für welche Plattform zu kompilieren ist, setzt man einen Link src/main.cpp auf die entsprechende ino-Datei.

Oder es gibt eine src/main.cpp die nichts anderes macht, als includes auf die anderen ino-Dateien.

sidey79 commented 4 years ago

Ich müsste das mal testen, in welcher Konstellation es dann noch klappt.

Irgend einen Grund wird es gebeben haben, dass ich eine SignalEsp.ino und nicht .h angelegt habe :)

spi43984 commented 4 years ago

Bestimmt 😃

Aber es geht ja um das Kompilieren für einen ESP32 und die SIGNALduino.ino bringt nur ein paar Zeilen Definitionen mit, der Rest ist ausgeklammert. Das meinte ich mit in ein Header-File auslagern.

sidey79 commented 4 years ago

Ich muss da mal verschiedenes testen, aber ich denke wir bekommen das gelöst

spi43984 commented 4 years ago

Ich habe einen Branch multiple-ino-one-main.cpp erstellt, um das mit der einen main.cpp zu testen. Das kann ich so bei mir kompilieren für beide Plattformen.

Vorteil: keine Links aus dem src-Folder mehr nötig. Nachteil: "#include Header.h" muss vermutlich in dieser main.cpp erfolgen (ansonsten hat er bei mir RunningAverage.h nicht gefunden, außer vielleicht das liegt in einem include-Folder, den es gerade nicht gibt).

Habe auch erste Tests mit dem ESP32 gemacht. WiFiManager macht Probleme (siehe fhem Forum Thread Firm- und Hardware für SIGNALduino direkt auf ESP8266 oder ESP32).

spi43984 commented 4 years ago

Hallo, hast Du irgendwelche neuen Erkenntnisse?

sidey79 commented 4 years ago

Nein, leider noch nicht. Mich hat es auch die Tage flach gelegt.

spi43984 commented 4 years ago

Dann mal gute Besserung!

sidey79 commented 4 years ago

Ich habe es mir angesehen

ESP8266 :

Wenn main.cpp und die ino beide eingebunden sind, dann klappt es natürlich nicht

Error linking for board Generic ESP8266 Module
main.cpp.o: (.bss.avgCounter+0x0): multiple definition of avgCounter
VS_Demo.cpp.o: (.bss.avgCounter+0x0): first defined here
Build failed for project 'VS_Demo'

main.cpp.o: In function setup
main.cpp:14: multiple definition of setup
VS_Demo.cpp.o: Z:\Benutzer\Sven\Documents\VS_Demo\VS_Demo.ino:14: first defined here

main.cpp.o: In function loop
main.cpp:32: multiple definition of loop

Wenn ich main.cpp in dem Projekt ignoriere klappt es.

ESP32 :

VS_Demo.ino: 28:32: fatal error: ../VS_Demo_esp32.ino: No such file or directory
   compilation terminated

Das überrascht mich nicht, denn VS_DEMO und VS_DEMO_ESP32.ino liegen ja im gleichen Verzeichnis. So passt es mit dem Include nicht. Ich habe mir jetzt auch mal VSCode installiert. Wobei die Verbindung zum pio home nicht klappt. Da kann ich selbst ein wenig experimentieren :)

Vielleicht liegt die Lösung auch eher darin, den Code aus der ino datei in die main.cpp zu verschieben und die .ino nur zum Auffinden der main.cpp zu verwenden

sidey79 commented 4 years ago

Ich habe es ein wenig angeändert. Die ino datei ist jetzt nur noch für die arduino ide vorhanden um die main.h und main.cpp zu laden.

Ich denke, ich könnte das signalduino Projekt auf diese Variante umändern

spi43984 commented 4 years ago

Prima, bin bereit zum Testen, sobald Du signalduino umgestellt hast. Dann macht auch das Troubleshooting mehr Sinn. Melde dich bitte, sobald signalduiono umgestellt ist, dann clone ich es und teste.