Partage
  • Partager sur Facebook
  • Partager sur Twitter

Makefile et librairie

    13 mai 2021 à 9:38:58

    michelbillaud a écrit:

    Avec CFLAGS+=AUTREOPTION, ça le fait pas ?

    Si on fait du GNU make si, en POSIX make += n'existe pas.



    • Partager sur Facebook
    • Partager sur Twitter

    git is great because Linus did it, mercurial is better because he didn't.

      13 mai 2021 à 12:37:37

      Mais que faut-il avoir fait de si horrible dans de nombreuses vies précédentes pour être contraint à utiliser le make de Posix ?

      -
      Edité par michelbillaud 13 mai 2021 à 12:39:38

      • Partager sur Facebook
      • Partager sur Twitter
        13 mai 2021 à 13:27:32

        Il y a aussi l'écosystème de MinGW. C'est gnumake sans... la configuration de gnumake.

        POSIX make, c'est les BSD, macs, et vieux gros UNIX, c'est ça?

        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
          14 mai 2021 à 8:50:00

          Ok alors je vais essayer d'être le plus exhaustif sur tout ce que j'ai tente :

          J'ai commencé via l'IDE Arduino (commande utilisé par l'IDE dans la règle "IDE" du makefile en fin de message).

          Ici les référance indéfinie se limite à quelques fonction :

          /usr/bin/avr-ld : /tmp/TopMain.ino.elf.8d5Hv0.ltrans0.ltrans.o : dans la fonction « _GLOBAL__sub_D_main » :
          /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x0) : référence indéfinie vers « UMLRTMain::setArgs(int, char* const*) »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x8) : référence indéfinie vers « Top_slots »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0xa) : référence indéfinie vers « Top_slots »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0xc) : référence indéfinie vers « UMLRTCapsuleToControllerMap::setDefaultSlotList(UMLRTSlot*, unsigned int) »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x10) : référence indéfinie vers « UMLRTMain::targetStartup() »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x1a) : référence indéfinie vers « DefaultController »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x1e) : référence indéfinie vers « DefaultController »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x20) : référence indéfinie vers « UMLRTController::spawn() »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x24) : référence indéfinie vers « UMLRTMain::mainLoop() »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x2c) : référence indéfinie vers « UMLRTMain::targetShutdown(bool) »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x32) : référence indéfinie vers « DefaultController »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x36) : référence indéfinie vers « DefaultController »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.startup+0x38) : référence indéfinie vers « UMLRTController::join() »
          /usr/bin/avr-ld : /tmp/TopMain.ino.elf.8d5Hv0.ltrans0.ltrans.o : dans la fonction « _GLOBAL__sub_I_main » :
          /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:38 : référence indéfinie vers « UMLRTSignalElement::UMLRTSignalElement() »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:38 : référence indéfinie vers « UMLRTSignalElementPool::UMLRTSignalElementPool(UMLRTSignalElement*, unsigned int, unsigned int) »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:12 : référence indéfinie vers « UMLRTSignal::UMLRTSignal() »
          /usr/bin/avr-ld : /tmp/TopMain.ino.elf.8d5Hv0.ltrans0.ltrans.o : dans la fonction « _GLOBAL__sub_I_main » :
          /home/breizh/Arduino/libraries/umlrt/umlrtmessage.hh:(.text.startup+0xc4) : référence indéfinie vers « UMLRTMessagePool::UMLRTMessagePool(UMLRTMessage*, unsigned int, unsigned int) »
          /usr/bin/avr-ld : /tmp/TopMain.ino.elf.8d5Hv0.ltrans0.ltrans.o : dans la fonction « _GLOBAL__sub_D_main » :
          /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.exit+0x4) : référence indéfinie vers « vtable for UMLRTMessagePool »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.exit+0x6) : référence indéfinie vers « vtable for UMLRTMessagePool »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.exit+0x14) : référence indéfinie vers « UMLRTPool::~UMLRTPool() »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.exit+0x22) : référence indéfinie vers « UMLRTSignal::~UMLRTSignal() »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.exit+0x2e) : référence indéfinie vers « vtable for UMLRTSignalElementPool »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.exit+0x30) : référence indéfinie vers « vtable for UMLRTSignalElementPool »
          /usr/bin/avr-ld : /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:(.text.exit+0x3e) : référence indéfinie vers « UMLRTPool::~UMLRTPool() »
          /usr/bin/avr-ld : /tmp/TopMain.ino.elf.8d5Hv0.ltrans0.ltrans.o : dans la fonction « _GLOBAL__sub_I_main » :
          /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino:38 : référence indéfinie vers « UMLRTMutex::~UMLRTMutex() »
          collect2: error: ld returned 1 exit status

          Certaine son ammener à disparaitre comme UMLRTMutex()  donc de toute façon cela posera problème à terme. Cependant, d'autre comme targetStartup() sont des simple return true;

          J'ai donc dans un premier temps tenter de link la librairie dans la commande de link avec -L(chemin) et -lrts sans succes. Peut être que ma methode n'etais pas la bonne mais j'ai tenté plusieurs emplacement pour la commande. Tout cela pour finir par simplement recopier les ligne de compilation dans un makefile avec ce qui semblerais être les bon link à la librairie.

          Ma deuxième tentative etais avec Arduino-Builder (qui est doccumenté avec les pied). j'ai donc réalisé la règles TopMainArduinoBuilder (makefile ci-dessous). Il semblerais que arduino-builder serais une espèce d'alias aux commande de compilation g++ et gcc ce qui me donne à la compilation :

          /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
          /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
          /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/sketch/TopMain.ino.cpp -o /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/preproc/ctags_target_for_gcc_minus_e.cpp -DARDUINO_LIB_DISCOVERY_PHASE
          /usr/bin/arduino-ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/preproc/ctags_target_for_gcc_minus_e.cpp
          /usr/bin/avr-g++ -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/sketch/TopMain.ino.cpp -o /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/sketch/TopMain.ino.cpp.o
          /usr/bin/avr-gcc -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/TopMain.ino.elf /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/sketch/TopMain.ino.cpp.o /home/breizh/Documents/Cours/stage/Sujet/TopMain/build/core/core.a -L/home/breizh/Documents/Cours/stage/Sujet/TopMain/build -lm
          

          Même erreur que avec l'ide arduino

          La suite vous la connaissez. J'ai tenté de faire mon propre makefile from skratch et ici, comme avec toute les solutions que j'ai tenté d'exploité, des référance indéfinie.

          === Le Makefile ===

          CXX=avr-g++
          
          CXXFLAGS = -Wall -Wextra
          CXXFLAGS += -std=c++17
          
          # ------ les bibliothèques extérieures
          
          AVR_ARDUINO=/usr/share/arduino/hardware/archlinux-arduino/avr
          
          CPPFLAGS += -I$(AVR_ARDUINO)/cores/arduino
          CPPFLAGS += -I$(AVR_ARDUINO)/variants/standard
          
          UML_ARDUINO = /home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib
          
          CPPFLAGS += -I$(UML_ARDUINO)/include
          LDLIBS   += -L$(UML_ARDUINO)/lib/arduino.avr-gcc
          LDLIBS   += -lrts
          
          CXXFLAGS+=-fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p
          LDFLAGS+=-flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p
          
          # ------- structure du projet ---------------------------
          
          MAIN = TopMain.cc
          SOURCES = OnOff.cc interact.cc Controller.cc Top.cc TopControllers.cc
          
          OBJ  = $(SOURCES:.cc=.o)
          OBJ += $(MAIN:.cc=.o)
          
          
          # -------- dependances ---------------------------------
          
          all: TopMain
          
          TopMain: $(OBJ)
          	$(LINK.cc) -o $@ $^
          
          TopMain.o:        TopMain.cc TopControllers.hh
          TopControllers.o: TopControllers.cc Top.hh Controller.hh interact.hh
          Top.o:            Top.cc Controller.hh interact.hh
          Controller.o:     Controller.cc OnOff.hh
          interact.o:       interact.cc OnOff.hh
          OnOff.o:          OnOff.cc
          
          # ---- divers ---------------------------------------------
          clean:
          	$(RM) *.o
          
          #LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
          
          # ---- commande IDE ----------------------------------
          IDE:
          	/usr/share/arduino/arduino-builder -dump-prefs -logger=machine -hardware /usr/share/arduino/hardware -tools /usr/share/arduino/tools-builder -libraries /home/breizh/Arduino/libraries -fqbn=archlinux-arduino:avr:uno -ide-version=10813 -build-path /tmp/arduino_build_288293 -warnings=none -build-cache /tmp/arduino_cache_454344 -prefs=build.warn_data_percentage=75 -verbose /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino
          	/usr/share/arduino/arduino-builder -compile -logger=machine -hardware /usr/share/arduino/hardware -tools /usr/share/arduino/tools-builder -libraries /home/breizh/Arduino/libraries -fqbn=archlinux-arduino:avr:uno -ide-version=10813 -build-path /tmp/arduino_build_288293 -warnings=none -build-cache /tmp/arduino_cache_454344 -prefs=build.warn_data_percentage=75 -verbose /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino
          	# Using board 'uno' from platform in folder: /usr/share/arduino/hardware/archlinux-arduino/avr
          	# Using core 'arduino' from platform in folder: /usr/share/arduino/hardware/archlinux-arduino/avr
          	# Detecting libraries used...
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /tmp/arduino_build_288293/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
          	# Alternatives for umlrtmain.hh: [umlrt]
          	# ResolveLibrary(umlrtmain.hh)
          	#   -> candidates: [umlrt]
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_288293/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
          	# Generating function prototypes...
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_288293/sketch/TopMain.ino.cpp -o /tmp/arduino_build_288293/preproc/ctags_target_for_gcc_minus_e.cpp -DARDUINO_LIB_DISCOVERY_PHASE
          	/usr/bin/arduino-ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /tmp/arduino_build_288293/preproc/ctags_target_for_gcc_minus_e.cpp
          	# Compilation du croquis...
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_288293/sketch/TopMain.ino.cpp -o /tmp/arduino_build_288293/sketch/TopMain.ino.cpp.o
          	# Compiling libraries...
          	# Compiling library "umlrt"
          	# Compiling core...
          	/usr/bin/avr-gcc -c -g -x assembler-with-cpp -flto -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/wiring_pulse.S -o /tmp/arduino_build_288293/core/wiring_pulse.S.o
          	/usr/bin/avr-gcc -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/WInterrupts.c -o /tmp/arduino_build_288293/core/WInterrupts.c.o
          	/usr/bin/avr-gcc -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/hooks.c -o /tmp/arduino_build_288293/core/hooks.c.o
          	/usr/bin/avr-gcc -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/wiring_pulse.c -o /tmp/arduino_build_288293/core/wiring_pulse.c.o
          	/usr/bin/avr-gcc -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/wiring_shift.c -o /tmp/arduino_build_288293/core/wiring_shift.c.o
          	/usr/bin/avr-gcc -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/wiring_analog.c -o /tmp/arduino_build_288293/core/wiring_analog.c.o
          	/usr/bin/avr-gcc -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/wiring_digital.c -o /tmp/arduino_build_288293/core/wiring_digital.c.o
          	/usr/bin/avr-gcc -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/wiring.c -o /tmp/arduino_build_288293/core/wiring.c.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/CDC.cpp -o /tmp/arduino_build_288293/core/CDC.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/PluggableUSB.cpp -o /tmp/arduino_build_288293/core/PluggableUSB.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/HardwareSerial1.cpp -o /tmp/arduino_build_288293/core/HardwareSerial1.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/IPAddress.cpp -o /tmp/arduino_build_288293/core/IPAddress.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/HardwareSerial3.cpp -o /tmp/arduino_build_288293/core/HardwareSerial3.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/HardwareSerial.cpp -o /tmp/arduino_build_288293/core/HardwareSerial.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/HardwareSerial0.cpp -o /tmp/arduino_build_288293/core/HardwareSerial0.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/HardwareSerial2.cpp -o /tmp/arduino_build_288293/core/HardwareSerial2.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/Print.cpp -o /tmp/arduino_build_288293/core/Print.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/Stream.cpp -o /tmp/arduino_build_288293/core/Stream.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/Tone.cpp -o /tmp/arduino_build_288293/core/Tone.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/USBCore.cpp -o /tmp/arduino_build_288293/core/USBCore.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/WMath.cpp -o /tmp/arduino_build_288293/core/WMath.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/WString.cpp -o /tmp/arduino_build_288293/core/WString.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/abi.cpp -o /tmp/arduino_build_288293/core/abi.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/main.cpp -o /tmp/arduino_build_288293/core/main.cpp.o
          	/usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/new.cpp -o /tmp/arduino_build_288293/core/new.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/wiring_pulse.S.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/WInterrupts.c.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/hooks.c.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/wiring.c.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/wiring_analog.c.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/wiring_digital.c.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/wiring_pulse.c.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/wiring_shift.c.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/CDC.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/HardwareSerial.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/HardwareSerial0.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/HardwareSerial1.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/HardwareSerial2.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/HardwareSerial3.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/IPAddress.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/PluggableUSB.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/Print.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/Stream.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/Tone.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/USBCore.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/WMath.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/WString.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/abi.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/main.cpp.o
          	/usr/bin/avr-gcc-ar rcs /tmp/arduino_build_288293/core/core.a /tmp/arduino_build_288293/core/new.cpp.o
          	# Archivage du noyau construit (mise en cache) dans :  /tmp/arduino_cache_454344/core/core_archlinux-arduino_avr_uno_33334de5e2d3c2672266eacd2ab9ae3a.a
          	# Linking everything together...
          	/usr/bin/avr-gcc -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o /tmp/arduino_build_288293/TopMain.ino.elf /tmp/arduino_build_288293/sketch/TopMain.ino.cpp.o /tmp/arduino_build_288293/core/core.a -L/tmp/arduino_build_288293 -lm
          
          # ---- Arduino - builder ----------------------------------
          ARDUINO=/usr/share/arduino
          CART=archlinux-arduino:avr:uno
          
          TopMainArduinoBuilder: dump-perfs
          	arduino-builder -compile -verbose -hardware $(ARDUINO)/hardware -tools $(ARDUINO)/tools-builder -libraries $(UML_ARDUINO) -fqbn=$(CART) -build-path build -warnings default TopMain.ino
          dump-perfs: preprocess
          	arduino-builder -dump-prefs -verbose -hardware $(ARDUINO)/hardware -tools $(ARDUINO)/tools-builder -libraries $(UML_ARDUINO) -fqbn=$(CART) -build-path build -warnings default TopMain.ino
          preprocess:
          	arduino-builder -preprocess -verbose -hardware $(ARDUINO)/hardware -tools $(ARDUINO)/tools-builder -libraries $(UML_ARDUINO) -fqbn=$(CART) -build-path build -warnings default TopMain.ino
          




          • Partager sur Facebook
          • Partager sur Twitter
            14 mai 2021 à 9:20:07

            Hola, on est parti sur "j'ai fait tout comme vous avez dit, et ça marche pas, bande de nuls".

            Pour en dire quelque chose, il faut que tu nous montres l'exécution du make avec

            • la première commande qui produit des références indéfinies
            • les références en question.
            Comme ça on peut remonter à la recette du makefile qui ne fait pas son job.
            Enfin bon, vu que c'est au link on peut supposer que c'est la commande des lignes 122-123, que je reformate
              # Linking everything together...
                /usr/bin/avr-gcc -w -Os -g -flto -fuse-linker-plugin \
                    -Wl,--gc-sections -mmcu=atmega328p \
                    -o /tmp/arduino_build_288293/TopMain.ino.elf \
                    /tmp/arduino_build_288293/sketch/TopMain.ino.cpp.o \
                    /tmp/arduino_build_288293/core/core.a -L/tmp/arduino_build_288293 \
                    -lm
             
            Je dis ça je dis rien, mais j'y vois pas de trace d'une bibliothèque qui apporterait « UMLRTMain::targetStartup() »
            Elle a pas l'air d'avoir été linkée together. Y a pas de miracle, elle va pas tomber du ciel...
            PS: si c'est parti comme ça, ta commande IDE, tu en fait un script, histoire de ne pas mélanger les commandes que tu donnes explicitement avec des trucs que make fait à l'insu de ton plein gré.

            -
            Edité par michelbillaud 14 mai 2021 à 9:30:46

            • Partager sur Facebook
            • Partager sur Twitter
              14 mai 2021 à 10:04:52

              michelbillaud a écrit:

              Hola, on est parti sur "j'ai fait tout comme vous avez dit, et ça marche pas, bande de nuls".

              Non en l’occurrence c'etais vraiment pas mon objectif ! Je vous remercie énormément déjà pour le coup de main donnée ! Je pense que j'ai vachement gagné en compétance niveau makefile grâce à vous.

              Sur la ligne de Llinking j'ai tenté de rajouter -L/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/lib/arduino.avr-gcc -lrts  avant le -L/tmp/arduino_build_288293 puis après. Et même chose avec arduino builder, j'ai essayé de link avec -L en reprenant la commande de linking.

              Aussi en compilant avec l'IDE il y à une ligne d'output qui est intéressant après les erreurs :

              Utilisation de la bibliothèque umlrt prise dans le dossier : /home/breizh/Arduino/libraries/umlrt (legacy)

              /home/breizh/Arduino/libraries/umlrt correspond à une copie de tout les .cc et .hh de la librairie (j'ai essayé de faire comme pour les autres librairie aurduino)

              • Partager sur Facebook
              • Partager sur Twitter
                14 mai 2021 à 13:05:19

                Bon, sait-on jamais, il faudrait aussi vérifier que ce qui est déclaré manquant, par exemple  UMLRTMain::targetStartup()

                figure bien dans la bibliothèque  librts

                (avec la commande nm ?)

                Parce que si elle a été compilée de traviole, ça le fera pas.

                -
                Edité par michelbillaud 14 mai 2021 à 13:09:27

                • Partager sur Facebook
                • Partager sur Twitter
                  14 mai 2021 à 13:26:00

                  UMLRTMain::targetStartup() existe bien. Il Y à juste un truc chelou, il y à un main.hh et un main.cc qui contiens les fonction de main.hh sauf targetStartup() targetShudDown() qui sont respectivement dans maintargetStartup.cc et maintargetShudDown.cc. Cependant ça ne viens quand même pas de la car j'ai essayé de tout mettre dans main.cc sans maintargetStartup.cc et maintargetShudDown.cc mais l'erreur reste la même.

                  -
                  Edité par Breizh291 14 mai 2021 à 13:27:03

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 mai 2021 à 13:52:20

                    Oui ben là, tu nous parles chinois parce qu'on ne sait pas ce qu'il y a dans ta bibliothèque, ce qu'elle est censé faire, et qu'on ne voit pas le code source. Alors pour trouver le problème des trucs cheloux, vaut mieux demander à une voyante.

                    targetSetup, et targetShutdown, c'est pas des fonctions que le code client est censé fournir (comme le setup / loop de l'arduino) ?

                    -
                    Edité par michelbillaud 14 mai 2021 à 13:53:55

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 mai 2021 à 14:30:01

                      targetSetup, et targetShutdown font partie de la librairie UML-RT et non des fonction Arduino tout comme toute les fonctions non référencé.

                      Pour résumé, mon objectif est de porter de code c++ généré à partir de modèle UML-RT sur Arduino. Le problème étant que ce n'est pas du tout prévu pour cela.

                      Du coup, on peut distinguer trois choses : le main, qui varie en fonction des modèle, la librairie UML-RT qui elle est statique et c'est à elle que le main fait appel et les fonction lié à arduino qui sont peu nombreuse et qui à priori sont lié correctement car sans

                      UML_ARDUINO = /home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib
                      CPPFLAGS += -I$(UML_ARDUINO)/include
                      LDLIBS   += -L$(UML_ARDUINO)/lib/arduino.avr-gcc

                      j'ai des erreurs lié aux fonctions arduino

                      Je vous prie de m’excuser si je ne suis pas toujours clair, j'essaie d'être le plus précis et concis à la fois ^^

                      Je vous remercie pour le temps que vous prenez !

                      Visiblement, le problème ne viens donc pas des fonctions arduino.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 mai 2021 à 16:14:31

                        > targetSetup, et targetShutdown font partie de la librairie UML-RT et non des fonction Arduino tout comme toute les fonctions non référencé.

                        Oui, j'entends bien que quand on travaille avec cette bibliothèque, il doit y avoir des fonctions de ce nom. La question est de savoir si c'est des fonctions fournies par la bibliothèque, ou des fonctions que le code client doit fournir à la bibliothèque (comme on doit fournir un "main" en C/C++  normal).

                        Quand on débugge un problème, il faut remettre en cause touts les affirmations "raisonnables" sur lesquelles on se repose quand tout se passe bien par magie. Et c'est pénible.

                        Ca tombe bien, être pénible, c'est une seconde nature chez moi. Qu'est ce qui prouve :

                        • qu'elles sont **définies** (par seulement déclarées) dans le source de la bibliothèque, dans quel fichier source ?
                        • que ces fonctions ayant été définies, les sources qui les contiennent ont bien donné lieu à des modules objets intégrés dans la bibliothèque ? (où sont les traces de la fabrication de la bibliothèque ?)
                        • que l'édition des liens du code client est bien faite avec la bibliothèque
                        C'est galère, hein.  Mais bon, en programmation il y a un facteur psychologique amusant du genre "oui oui mais non non, t'inquiète, ça s'est bon ça peut pas venir de là je suis sûr" qui empêche de trouver l'erreur, alors qu'on a tous les éléments sous le nez.
                        (C'est pour ça qu'on trouve plus facilement les problèmes dans le code des autres)

                        -
                        Edité par michelbillaud 14 mai 2021 à 16:18:23

                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 mai 2021 à 14:15:42

                          J'ai réduit le problème à un cas plus simple pour faciliter le debeugage.

                          Donc j'ai crée une classe Led tel que :

                          #ifndef LED_H
                          #define LED_H
                          
                          #include <Arduino.h>
                          
                          class Led{
                            public:
                              Led(int pin);
                          
                              inline int getPin() {return m_pin;};
                          
                              void writeLed(int state);
                          
                              void flash(int delay);
                          
                            private:
                              int m_pin;
                          };
                          
                          #endif // LED_H
                          

                          et

                          #include "Led.h"
                          
                          Led::Led(int pin){
                            m_pin = pin;
                           pinMode(pin,OUTPUT);
                          }
                          
                          
                          void Led::writeLed(int state){
                            digitalWrite(getPin(),state);
                          }
                          
                          void Led::flash(int time){
                            this->writeLed(HIGH);
                            delay(time);
                            this->writeLed(LOW);
                            delay(time);
                          }
                          


                          compilé en .a grâce au makefile suivant :

                          CXX=avr-g++
                          
                          CXXFLAGS = -Wall -Wextra
                          CXXFLAGS += -std=c++17
                          
                          # ------ les bibliothèques extérieures
                          
                          AVR_ARDUINO=/usr/share/arduino/hardware/archlinux-arduino/avr
                          
                          CPPFLAGS += -I$(AVR_ARDUINO)/cores/arduino
                          CPPFLAGS += -I$(AVR_ARDUINO)/variants/standard
                          
                          all: libLed.a
                          
                          libLed.a: Led.o
                              ar rcs $@ $<
                          
                          Led.o: Led.cpp
                              avr-gcc -c $< -o $@ $(CPPFLAGS)
                          
                          clean:
                              $(RM) *.o *.a
                          

                          donc ça répond à quelques questions, oui toute les fonctions sont bien définie. Le librairie crée bien un fichier objet et un fichier pour la librairie statique

                          Ensuite mon main donne ça :

                          #include <Led.h>
                          
                          void setup(){}
                          
                          Led led(2);
                          
                          void loop(){
                            led.flash(1000);
                          }
                          

                          Juste de quoi faire clignoter une led toute les seconde sur la GPIO 2

                          tout ça compilé via :

                          CXX=avr-g++
                          
                          CXXFLAGS = -Wall -Wextra
                          CXXFLAGS += -std=c++17
                          
                          # ------ les bibliothèques extérieures
                          
                          AVR_ARDUINO=/usr/share/arduino/hardware/archlinux-arduino/avr
                          
                          CPPFLAGS += -I$(AVR_ARDUINO)/cores/arduino
                          CPPFLAGS += -I$(AVR_ARDUINO)/variants/standard
                          
                          LED_ARDUINO = /home/breizh/Documents/Cours/stage/Sujet/simplecase/lib
                          
                          CPPFLAGS += -I$(LED_ARDUINO)
                          LDLIBS   += -L$(LED_ARDUINO)
                          LDLIBS   += -lLed
                          
                          CXXFLAGS+=-fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p
                          LDFLAGS+=-flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p
                          
                          # ------- structure du projet ---------------------------
                          
                          MAIN = simplecase.cpp
                          OBJ += $(MAIN:.cpp=.o)
                          
                          # -------- dependances ---------------------------------
                          
                          all: simplecase
                          
                          simplecase: $(OBJ)
                              $(LINK.cc) -o $@ $^ $(LDLIBS)
                          
                          simplecase.o:    simplecase.cpp
                          
                          # ---- divers ---------------------------------------------
                          clean:
                              $(RM) *.o *.d
                          

                          Au finale, pour l'instant en tout cas, je n'ai plus de référence indéfinie vers la lib mais vers les fonctions Arduino comme digitalWrite() ou delay() et la ça m'échappe un peu pourquoi. J'ai pensé à rajouté un -L et -l pour arduino il il n'y à pas de .a.

                          Im manque que

                          michelbillaud a écrit:

                          Ca tombe bien, être pénible, c'est une seconde nature chez moi. Qu'est ce qui prouve :

                          • que l'édition des liens du code client est bien faite avec la bibliothèque

                          Comment puis-je vérifier cela ?


                          Désolé pour le temps de ma réponse, j'ai eu plusieurs pistes intéressante mais qui n'ont mené nul part.

                          Merci encore pour vôtre aide.



                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 mai 2021 à 14:56:36

                            Breizh291 a écrit:

                            michelbillaud a écrit:

                            Ca tombe bien, être pénible, c'est une seconde nature chez moi. Qu'est ce qui prouve :

                            • que l'édition des liens du code client est bien faite avec la bibliothèque

                            Comment puis-je vérifier cela ?

                            Le plus simple est de regarder les commandes que le makefile fait exécuter, et de vérifier si l'option -lmabibliotheque est bien à l'endroit voulu, dans le commande qui est censée créer l'exécutable. 

                            • soit en tapant make, qui va essayer de tout faire (et cracher un million de lignes d'erreur)
                            • soit en tapant make -n, qui va dire quelles commandes il faudrait exécuter, mais ne les exécutera pas (ça ira plus vite :-)).

                            Pour arduino, je crois me souvenir (je dis peut être une bêtise) qu'il n'y a pas une bibliothèque précompilée.

                            Quand on crée un projet, il recompile tous les sources "arduino" dans un coin du projet (sketch). Ce qui fait qu'il affiche des tas de trucs

                            /usr/share/arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -D__PROG_TYPES_COMPAT__ -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard /tmp/build14251417063615655543.tmp/sketch_may18a.cpp -o /tmp/build14251417063615655543.tmp/sketch_may18a.cpp.o 
                            /usr/share/arduino/hardware/tools/avr/bin/avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_
                            /usr/share/arduino/hardware/tools/avr/bin/avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -D__PROG_TYPES_COMPAT__ -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard /usr/share/arduino/hardware/arduino/cores/arduino/WInterrupts.c -o /tmp/build14251417063615655543.tmp/WInterrupts.c.o 
                            /usr/share/arduino/hardware/tools/avr/bin/avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -D__PROG_TYPES_COMPAT__ -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard /usr/share/arduino/hardware/arduino/cores/arduino/wiring_digital.c -o /tmp/build14251417063615655543.tmp/wiring_digital.c.o 
                            /usr/share/arduino/hardware/tools/avr/bin/avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -D__PROG_TYPES_COMPAT__ -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard /usr/share/arduino/hardware/arduino/cores/arduino/wiring_shift.c -o /tmp/build14251417063615655543.tmp/wiring_shift.c.o 
                            /usr/share/arduino/hardware/tools/avr/bin/avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -D__PROG_TYPES_COMPAT__ -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard /usr/share/arduino/hardware/arduino/cores/arduino/wiring_analog.c -o /tmp/build14251417063615655543.tmp/wiring_analog.c.o 
                            

                            et ensuite c'est mis dans un "core.a"

                            /usr/share/arduino/hardware/tools/avr/bin/avr-ar rcs /tmp/build14251417063615655543.tmp/core.a /tmp/build14251417063615655543.tmp/CDC.cpp.o 
                            



                            Donc si on veut disposer des fonctions arduino, il va falloir aller chercher dans le répertoire des sources

                            /usr/share/arduino/hardware/arduino/cores/arduino/

                            PS: la justification, c'est que l'environnement arduino permet de fabriquer des exécutables pour une foultitude d'architectures différentes (avr, xtensa, ...) . Donc ils ne distribuent pas le "système arduino" pré-compilé sous forme de bibliothèques, mais sous forme de sources à compiler le moment venu.

                            -
                            Edité par michelbillaud 18 mai 2021 à 15:07:30

                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 mai 2021 à 15:39:07

                              Le makefile que tu as posté plus haut compilait aussi la bibliothèque arduino dans un fichier  de bibliothèque statique "core.a", c'est probablement ce qu'il manque...

                              Si tu peux, installe plutôt platformio, c'est beaucoup plus simple de compiler des projets arduino (ou pour d'autres frameworks pour microcontrôleurs). Pour ton exemple basique, après avoir créé un projet avec platformio en suivant ces instructions: https://docs.platformio.org/en/latest/core/quickstart.html#initialize-project

                              Tu n'as qu'à avoir une structure comme celle-ci:

                              .
                              ├── lib
                              │   └── Led
                              │       └── src
                              │           ├── Led.cpp
                              │           └── Led.h
                              │   
                              ├── platformio.ini
                              └── src
                                  └── main.cpp
                              

                              Et platformio va automatiquement compiler la bibliothèque Led, la bibliothèque arduino, et le programme, sans rien configurer de particulier.

                              Tu peux installer platformio seul ou sous visual studio code si tu veux un IDE moderne en plus.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 mai 2021 à 10:25:23

                                PlatformIo peut être une alternative ! Je vais regarder de quoi il en retourne.

                                En attendant, j'ai réussi à compiler mon cas simple ! Pour le core.a j'ai juste source le /tml dans un premiers temps pour tester. Le Makefile est donc le suivant :
                                CXX=avr-g++
                                
                                CXXFLAGS = -Wall -Wextra
                                CXXFLAGS += -std=c++17
                                
                                # ------ les bibliothèques extérieures
                                
                                AVR_ARDUINO=/usr/share/arduino/hardware/archlinux-arduino/avr
                                
                                CPPFLAGS += -I$(AVR_ARDUINO)/cores/arduino
                                CPPFLAGS += -I$(AVR_ARDUINO)/variants/standard
                                
                                LED_ARDUINO = /home/breizh/Documents/Cours/stage/Sujet/simplecase/lib
                                
                                CPPFLAGS += -I$(LED_ARDUINO)
                                LDLIBS   += -L$(LED_ARDUINO)
                                LDLIBS   += -lLed
                                
                                LDLIBS	 += -L/tmp/arduino_build_217012/core
                                LDLIBS   += -lcore
                                
                                CXXFLAGS+=-fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p
                                LDFLAGS+=-flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p
                                
                                # ------- structure du projet ---------------------------
                                
                                MAIN = simplecase.cpp
                                OBJ += $(MAIN:.cpp=.o)
                                
                                # -------- dependances ---------------------------------
                                
                                all: simplecase
                                
                                simplecase: $(OBJ)
                                	$(LINK.cc) -o $@ $^ $(LDLIBS)
                                
                                simplecase.o:	simplecase.cpp
                                
                                # ---- divers ---------------------------------------------
                                clean:
                                	$(RM) *.o *.d
                                

                                et ça compile !

                                Maintenant, on peut retourner au problème originel à savoir les référence indéfinie de la lib rts.


                                J'ai donc un Makefile assez similaire à savoir :

                                CXX=avr-g++
                                
                                CXXFLAGS = -Wall -Wextra
                                CXXFLAGS += -std=c++17
                                
                                # ------ les bibliothèques extérieures
                                
                                AVR_ARDUINO=/usr/share/arduino/hardware/archlinux-arduino/avr
                                
                                CPPFLAGS += -I$(AVR_ARDUINO)/cores/arduino
                                CPPFLAGS += -I$(AVR_ARDUINO)/variants/standard
                                
                                UML_ARDUINO = /home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib
                                
                                CPPFLAGS += -I$(UML_ARDUINO)/include
                                LDLIBS   += -L$(UML_ARDUINO)/lib/arduino.avr-gcc
                                LDLIBS   += -lrts
                                
                                LDLIBS	 += -L/tmp/arduino_build_217012/core
                                LDLIBS   += -lcore
                                
                                CXXFLAGS+=-fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p
                                LDFLAGS+=-flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p
                                
                                # ------- structure du projet ---------------------------
                                
                                MAIN = TopMain.cc
                                SOURCES = OnOff.cc interact.cc Controller.cc Top.cc TopControllers.cc
                                
                                OBJ  = $(SOURCES:.cc=.o)
                                OBJ += $(MAIN:.cc=.o)
                                
                                
                                # -------- dependances ---------------------------------
                                
                                all: TopMain
                                
                                TopMain: $(OBJ)
                                	$(LINK.cc) -o $@ $^ $(LDLIBS)
                                
                                TopMain.o:        TopMain.cc TopControllers.hh
                                TopControllers.o: TopControllers.cc Top.hh Controller.hh interact.hh
                                Top.o:            Top.cc Controller.hh interact.hh
                                Controller.o:     Controller.cc OnOff.hh
                                interact.o:       interact.cc OnOff.hh
                                OnOff.o:          OnOff.cc
                                
                                # ---- divers ---------------------------------------------
                                clean:
                                	$(RM) *.o

                                Et pourtant la, j'ai énormément de référence indéfinie.

                                Les commande qu'il exécute sont

                                avr-g++ -Wall -Wextra -std=c++17 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include  -c -o OnOff.o OnOff.cc
                                avr-g++ -Wall -Wextra -std=c++17 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include  -c -o interact.o interact.cc
                                avr-g++ -Wall -Wextra -std=c++17 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include  -c -o Controller.o Controller.cc
                                avr-g++ -Wall -Wextra -std=c++17 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include  -c -o Top.o Top.cc
                                avr-g++ -Wall -Wextra -std=c++17 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include  -c -o TopControllers.o TopControllers.cc
                                avr-g++ -Wall -Wextra -std=c++17 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include  -c -o TopMain.o TopMain.cc
                                avr-g++ -Wall -Wextra -std=c++17 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/include -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p  -o TopMain OnOff.o interact.o Controller.o Top.o TopControllers.o TopMain.o -L/home/breizh/Documents/Cours/stage/Sujet/uml-rt-port-for-arduino/umlrt-arduino_lib/lib/arduino.avr-gcc -lrts -L/tmp/arduino_build_217012/core -lcore

                                Je n'arrive pas à saisir d'ou viens le problème et pour reprendre les 3 question de michel,
                                - je n'ai pas regardé toute les fonctions une par une mais en tout cas il y en a un certain nombre de déclaré et définie de façon sur.

                                - ils ont effectivement donné lieu à des objets

                                - et a priorie l'edition de lien est bien faire car c'est les meme commande que le cas simple.

                                La ou je suis vraiment perplexe c'est que, a priorie, ça ne viens pas du Makefile car il marche dans mon cas simple. L'une des possibilité c'est que cela vienne des modifications que j'ai effectué dans la librairie rts pour la compiler avec avr mais cela serais étrange car j'ai des référance indéfinie sur des fonctions qui return true sans appeler d'autre fonctions.

                                Merci beaucoup pour vôtre aide !

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 mai 2021 à 10:46:17

                                  > j'ai énormément de référence indéfinie.

                                  Les questions qui vont avec c'est

                                  • quelles fonctions (c'est écrit dans le message d'erreur)
                                  • dans quel fichier source sont-elles définies (il faut chercher un peu)
                                  • que devient ce fichier source (.o, bibliothèque ?)
                                  • ce qui en résulte est il pris en compte pour le link.
                                  Ou dans l'autre sens
                                  • on voit la commande de link (la dernière)
                                  • il y a quelques .o et les bibliothèques -lcore et -lrts. Très bien.
                                  • Tes fonctions manquantes devraient  venir duquel de ces fichiers ?
                                  > priorie, ça ne viens pas du Makefile car il marche dans mon cas simple.
                                  Faut croire que tu n'es pas dans le cas simple, et donc que ça marche sur le cas simple, ça ne disculpe pas le Makefile.
                                  Il n'y a pas de magie, les problèmes ont une cause.

                                  -
                                  Edité par michelbillaud 19 mai 2021 à 10:47:42

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 mai 2021 à 11:42:39

                                    -lcore est uniquement pour les fonction Arduino (digitalWrite(), pinMode() etc...) or tout mes référence indéfinie vienne de la librairie UML-rt (-lrts) (et il y en à trop pour les lister). Les fonctions sont définie dans divers fichier de la librairie.

                                    Par contre j'ai des message avant les référence indéfinie que je n'avais pas vu :

                                    /usr/bin/avr-ld : TopMain la section «.text» ne va pas s'adapter à la région «text»
                                    /usr/bin/avr-ld : l'adresse 0x813adf de TopMain de la section «.bss» n'est pas dans la région «data»
                                    /usr/bin/avr-ld : l'adresse 0x813adf de TopMain de la section «.bss» n'est pas dans la région «data»
                                    /usr/bin/avr-ld : l'adresse 0x813adf de TopMain de la section «.bss» n'est pas dans la région «data»
                                    /usr/bin/avr-ld : la région « text » est débordée de 33110 octets
                                    


                                    Et aussi autre point que peut-être utilse, je n'ai pas les même message d’erreur avec l'IDE (qui ba chercher les fichiers source de la lib dans un dossier définie par l'IDE dans le quelle j'ai mis tout les .hh et .cc pour tester), la, l'es référence indéfinie ne sont pas sur la même choses et plus contenue. Par exemple, via l'IDE j'ai une référence indéfinie vers UMLRTMain::targetStartup() qui fait juste un "return true;" ce qui n'est pas le cas avec mon Makefile. à l'inverse, avec le make file j'ai une référence vers UMLRTController::UMLRTController(char const*, unsigned int, UMLRTSlot*) qui n'est pas présente avec l'ide.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      19 mai 2021 à 13:11:14

                                      Le fait que ça "return true" n'a aucune importance dans l'histoire. Si la référence est indéfinie,  c'est que la définition de la fonction UMLRTMain::targetStartup()  n'est pas prise en compte.

                                      Si tu as des différences entre ce qui se passe avec ton Makefile et avec l'IDE, c'est une piste. L'IDE lance certaines actions, il faut te débrouiller pour savoir lesquelles, pour pouvoir les reproduire exactement. Il génère pas un Makefile intermédiaire ?

                                      Nous, on n'est pas dans ton environnement, on n'a pas le code, on sait pas ce que tu fais avec. Et on a des capacités de voyance limitées.

                                      -
                                      Edité par michelbillaud 19 mai 2021 à 13:12:29

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 mai 2021 à 11:35:14

                                        J'ai précisé l'histoire du "return true" car je ne sait pas si par exemple la fonction func appel une fonction indéfinie il y à une référence indéfinie sur func ou la fonction appelé par func ^^ et de plus vu que j'ai elagué grossièrement la lib pour arduino (virer les thread, sig, etc...) ce n'est pas impossible qui y ai des vrai fonctions indéfinie mais ne n'est pas le cas de targetSetup()

                                        L'IDE ne génére par de Makefile intermédiaire ou sinon il est mega bien planqué.

                                        l'IDE execute :

                                        /usr/share/arduino/arduino-builder -dump-prefs -logger=machine -hardware /usr/share/arduino/hardware -hardware /home/breizh/.arduino15/packages -tools /usr/share/arduino/tools-builder -tools /home/breizh/.arduino15/packages -libraries /home/breizh/Arduino/libraries -fqbn=archlinux-arduino:avr:uno -ide-version=10813 -build-path /tmp/arduino_build_475295 -warnings=none -build-cache /tmp/arduino_cache_964216 -prefs=build.warn_data_percentage=75 -verbose /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino
                                        /usr/share/arduino/arduino-builder -compile -logger=machine -hardware /usr/share/arduino/hardware -hardware /home/breizh/.arduino15/packages -tools /usr/share/arduino/tools-builder -tools /home/breizh/.arduino15/packages -libraries /home/breizh/Arduino/libraries -fqbn=archlinux-arduino:avr:uno -ide-version=10813 -build-path /tmp/arduino_build_475295 -warnings=none -build-cache /tmp/arduino_cache_964216 -prefs=build.warn_data_percentage=75 -verbose /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino
                                        /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /tmp/arduino_build_475295/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
                                        /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_475295/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
                                        /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_475295/sketch/TopMain.ino.cpp -o /tmp/arduino_build_475295/preproc/ctags_target_for_gcc_minus_e.cpp -DARDUINO_LIB_DISCOVERY_PHASE
                                        /usr/bin/arduino-ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /tmp/arduino_build_475295/preproc/ctags_target_for_gcc_minus_e.cpp
                                        /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_475295/sketch/TopMain.ino.cpp -o /tmp/arduino_build_475295/sketch/TopMain.ino.cpp.o
                                        /usr/bin/avr-gcc -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o /tmp/arduino_build_475295/TopMain.ino.elf /tmp/arduino_build_475295/sketch/TopMain.ino.cpp.o /tmp/arduino_build_475295/../arduino_cache_964216/core/core_archlinux-arduino_avr_uno_33334de5e2d3c2672266eacd2ab9ae3a.a -L/tmp/arduino_build_475295 -lm

                                        ce qui me donne des référance indéfinie sur tout les fonvtion de mon fichier main :

                                        #include <umlrtmain.hh>
                                        
                                        #include <umlrtcontroller.hh>
                                        #include "TopControllers.hh"
                                        #include <umlrtcapsuletocontrollermap.hh>
                                        #include <umlrtmessagepool.hh>
                                        #include <umlrtsignalelementpool.hh>
                                        #include <umlrttimerpool.hh>
                                        #include <umlrtuserconfig.hh>
                                        #include <stdio.h>
                                        
                                        static UMLRTSignalElement signalElementBuffer[USER_CONFIG_SIGNAL_ELEMENT_POOL_SIZE];
                                        static UMLRTSignalElementPool signalElementPool( signalElementBuffer, USER_CONFIG_SIGNAL_ELEMENT_POOL_SIZE );
                                        
                                        static UMLRTMessage messageBuffer[USER_CONFIG_MESSAGE_POOL_SIZE];
                                        static UMLRTMessagePool messagePool( messageBuffer, USER_CONFIG_MESSAGE_POOL_SIZE );
                                        
                                        //static UMLRTTimer timers[USER_CONFIG_TIMER_POOL_SIZE];
                                        //static UMLRTTimerPool timerPool( timers, USER_CONFIG_TIMER_POOL_SIZE );
                                        
                                        void setup(){}
                                        
                                        void loop()
                                        {
                                            //UMLRTController::initializePools( &signalElementPool, &messagePool, &timerPool );
                                            //UMLRTMain::setArgs( argc, argv );
                                            UMLRTCapsuleToControllerMap::setDefaultSlotList( Top_slots, 3 );
                                        
                                            if( ! UMLRTMain::targetStartup() )
                                                return EXIT_FAILURE;
                                        
                                            DefaultController->spawn();
                                        
                                            if( ! UMLRTMain::mainLoop() )
                                                return UMLRTMain::targetShutdown( false );
                                        
                                            DefaultController->join();
                                        
                                            return UMLRTMain::targetShutdown( true );
                                        }

                                        DefaultController et Top_slots avec "externe UMLClass variable;" dans "TopMainController.hh"

                                        Le plus gros problème que j'ai c'est que je ne voit plus trop ou chercher..

                                        Mais du coup

                                        /usr/bin/avr-ld : TopMain la section «.text» ne va pas s'adapter à la région «text»
                                        /usr/bin/avr-ld : l'adresse 0x813ad6 de TopMain de la section «.bss» n'est pas dans la région «data»
                                        /usr/bin/avr-ld : l'adresse 0x813ad6 de TopMain de la section «.bss» n'est pas dans la région «data»
                                        /usr/bin/avr-ld : la région « text » est débordée de 32318 octets
                                        

                                        N'a aucune importance ? Quelle est la nature de ces messages ?


                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 mai 2021 à 11:44:02

                                          > DefaultController et Top_slots avec "externe UMLClass variable;" dans "TopMainController.hh"

                                          ah. Normalement, les .hh, ça contient des déclarations de fonctions, pas des définitions.

                                          Mézou est donc la définition ?

                                          Bon, si le monde est bien fait (et le code aussi), il doit y avoir un fichier TopMainController.cc  qui contient le code pour TopMainController.hh

                                          Dans le Makefile plus haut

                                          SOURCES = OnOff.cc interact.cc Controller.cc Top.cc TopControllers.cc
                                           

                                          je crois que je ne le vois pas.



                                          -
                                          Edité par michelbillaud 20 mai 2021 à 11:46:36

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            20 mai 2021 à 11:49:58

                                            C'est une faute de ma part ! Il me seblais que c'etais "TopMainContoller" mais c'est bien "TopController"

                                            qui du coup contienne respectivement pour le .hh et .cc

                                            #ifndef TOPCONTROLLERS_HH
                                            #define TOPCONTROLLERS_HH
                                            
                                            class UMLRTController;
                                            struct UMLRTCommsPort;
                                            struct UMLRTSlot;
                                            
                                            enum CapsuleInstanceId
                                            {
                                                InstId_Top,
                                                InstId_Top_controller,
                                                InstId_Top_interact
                                            };
                                            extern UMLRTController * DefaultController;
                                            extern UMLRTCommsPort internalports_Top[];
                                            extern UMLRTCommsPort borderports_Top_controller[];
                                            extern UMLRTCommsPort internalports_Top_controller[];
                                            extern UMLRTCommsPort borderports_Top_interact[];
                                            extern UMLRTCommsPort internalports_Top_interact[];
                                            extern UMLRTSlot Top_slots[];
                                            
                                            #endif
                                            

                                            et

                                            #include "TopControllers.hh"
                                            
                                            #include "Controller.hh"
                                            #include "Top.hh"
                                            #include "interact.hh"
                                            #include <umlrtcapsuleclass.hh>
                                            #include <umlrtcapsulepart.hh>
                                            #include <umlrtcommsport.hh>
                                            #include <umlrtcommsportfarend.hh>
                                            #include <umlrtcontroller.hh>
                                            #include <umlrtslot.hh>
                                            //#include <cstddef>
                                            
                                            
                                            static UMLRTController DefaultController_( "DefaultController" );
                                            
                                            UMLRTController * DefaultController = &DefaultController_;
                                            
                                            static UMLRTCommsPortFarEnd internalfarEndList_Top[] =
                                            {
                                                {
                                                    0,
                                                    NULL
                                                }
                                            };
                                            
                                            UMLRTCommsPort internalports_Top[] =
                                            {
                                                {
                                                    &Top,
                                                    Capsule_Top::internalport_log,
                                                    &Top_slots[InstId_Top],
                                                    1,
                                                    internalfarEndList_Top,
                                                    NULL,
                                                    NULL,
                                                    "",
                                                    true,
                                                    false,
                                                    true,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    true,
                                                    false,
                                                    false,
                                                    false
                                                }
                                            };
                                            
                                            static const UMLRTCommsPort * internalports_Top_ptrs[] =
                                            {
                                                &internalports_Top[0]
                                            };
                                            
                                            static Capsule_Top top( &Top, &Top_slots[InstId_Top], NULL, internalports_Top_ptrs, true );
                                            
                                            static UMLRTSlot * slots_Top[] =
                                            {
                                                &Top_slots[InstId_Top_controller],
                                                &Top_slots[InstId_Top_interact]
                                            };
                                            
                                            static UMLRTCapsulePart parts_Top[] =
                                            {
                                                {
                                                    &Top,
                                                    Capsule_Top::part_controller,
                                                    1,
                                                    &slots_Top[0]
                                                },
                                                {
                                                    &Top,
                                                    Capsule_Top::part_interact,
                                                    1,
                                                    &slots_Top[1]
                                                }
                                            };
                                            
                                            static UMLRTCommsPortFarEnd borderfarEndList_Top_controller[] =
                                            {
                                                {
                                                    0,
                                                    &borderports_Top_interact[Capsule_interact::borderport_OnOffPort]
                                                }
                                            };
                                            
                                            UMLRTCommsPort borderports_Top_controller[] =
                                            {
                                                {
                                                    &Controller,
                                                    Capsule_Controller::borderport_OnOffPortCtrl,
                                                    &Top_slots[InstId_Top_controller],
                                                    1,
                                                    borderfarEndList_Top_controller,
                                                    NULL,
                                                    NULL,
                                                    "",
                                                    true,
                                                    true,
                                                    true,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    true
                                                }
                                            };
                                            
                                            static const UMLRTCommsPort * borderports_Top_controller_ptrs[] =
                                            {
                                                &borderports_Top_controller[0]
                                            };
                                            
                                            static UMLRTCommsPortFarEnd internalfarEndList_Top_controller[] =
                                            {
                                                {
                                                    0,
                                                    NULL
                                                }
                                            };
                                            
                                            UMLRTCommsPort internalports_Top_controller[] =
                                            {
                                                {
                                                    &Controller,
                                                    Capsule_Controller::internalport_log,
                                                    &Top_slots[InstId_Top_controller],
                                                    1,
                                                    internalfarEndList_Top_controller,
                                                    NULL,
                                                    NULL,
                                                    "",
                                                    true,
                                                    false,
                                                    true,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    true,
                                                    false,
                                                    false,
                                                    false
                                                }
                                            };
                                            
                                            static const UMLRTCommsPort * internalports_Top_controller_ptrs[] =
                                            {
                                                &internalports_Top_controller[0]
                                            };
                                            
                                            static Capsule_Controller top_controller( &Controller, &Top_slots[InstId_Top_controller], borderports_Top_controller_ptrs, internalports_Top_controller_ptrs, true );
                                            
                                            static UMLRTCommsPortFarEnd borderfarEndList_Top_interact[] =
                                            {
                                                {
                                                    0,
                                                    &borderports_Top_controller[Capsule_Controller::borderport_OnOffPortCtrl]
                                                }
                                            };
                                            
                                            UMLRTCommsPort borderports_Top_interact[] =
                                            {
                                                {
                                                    &interact,
                                                    Capsule_interact::borderport_OnOffPort,
                                                    &Top_slots[InstId_Top_interact],
                                                    1,
                                                    borderfarEndList_Top_interact,
                                                    NULL,
                                                    NULL,
                                                    "",
                                                    true,
                                                    true,
                                                    true,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    true
                                                }
                                            };
                                            
                                            static const UMLRTCommsPort * borderports_Top_interact_ptrs[] =
                                            {
                                                &borderports_Top_interact[0]
                                            };
                                            
                                            static UMLRTCommsPortFarEnd internalfarEndList_Top_interact[] =
                                            {
                                                {
                                                    0,
                                                    NULL
                                                }
                                            };
                                            
                                            UMLRTCommsPort internalports_Top_interact[] =
                                            {
                                                {
                                                    &interact,
                                                    Capsule_interact::internalport_log,
                                                    &Top_slots[InstId_Top_interact],
                                                    1,
                                                    internalfarEndList_Top_interact,
                                                    NULL,
                                                    NULL,
                                                    "",
                                                    true,
                                                    false,
                                                    true,
                                                    false,
                                                    false,
                                                    false,
                                                    false,
                                                    true,
                                                    false,
                                                    false,
                                                    false
                                                }
                                            };
                                            
                                            static const UMLRTCommsPort * internalports_Top_interact_ptrs[] =
                                            {
                                                &internalports_Top_interact[0]
                                            };
                                            
                                            static Capsule_interact top_interact( &interact, &Top_slots[InstId_Top_interact], borderports_Top_interact_ptrs, internalports_Top_interact_ptrs, true );
                                            
                                            UMLRTSlot Top_slots[] =
                                            {
                                                {
                                                    "Top",
                                                    0,
                                                    &Top,
                                                    NULL,
                                                    0,
                                                    &top,
                                                    &DefaultController_,
                                                    2,
                                                    parts_Top,
                                                    0,
                                                    NULL,
                                                    NULL,
                                                    true,
                                                    false
                                                },
                                                {
                                                    "Top.controller",
                                                    0,
                                                    &Controller,
                                                    &Top,
                                                    Capsule_Top::part_controller,
                                                    &top_controller,
                                                    &DefaultController_,
                                                    0,
                                                    NULL,
                                                    1,
                                                    borderports_Top_controller,
                                                    NULL,
                                                    true,
                                                    false
                                                },
                                                {
                                                    "Top.interact",
                                                    0,
                                                    &interact,
                                                    &Top,
                                                    Capsule_Top::part_interact,
                                                    &top_interact,
                                                    &DefaultController_,
                                                    0,
                                                    NULL,
                                                    1,
                                                    borderports_Top_interact,
                                                    NULL,
                                                    true,
                                                    false
                                                }
                                            };
                                            




                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 mai 2021 à 12:07:53

                                              Sinon, dans ce que l'IDE exécute

                                              /usr/share/arduino/arduino-builder -dump-prefs -logger=machine -hardware /usr/share/arduino/hardware -hardware /home/breizh/.arduino15/packages -tools /usr/share/arduino/tools-builder -tools /home/breizh/.arduino15/packages -libraries /home/breizh/Arduino/libraries -fqbn=archlinux-arduino:avr:uno -ide-version=10813 -build-path /tmp/arduino_build_475295 -warnings=none -build-cache /tmp/arduino_cache_964216 -prefs=build.warn_data_percentage=75 -verbose /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino
                                              /usr/share/arduino/arduino-builder -compile -logger=machine -hardware /usr/share/arduino/hardware -hardware /home/breizh/.arduino15/packages -tools /usr/share/arduino/tools-builder -tools /home/breizh/.arduino15/packages -libraries /home/breizh/Arduino/libraries -fqbn=archlinux-arduino:avr:uno -ide-version=10813 -build-path /tmp/arduino_build_475295 -warnings=none -build-cache /tmp/arduino_cache_964216 -prefs=build.warn_data_percentage=75 -verbose /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino
                                              /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /tmp/arduino_build_475295/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
                                              /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_475295/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
                                              /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_475295/sketch/TopMain.ino.cpp -o /tmp/arduino_build_475295/preproc/ctags_target_for_gcc_minus_e.cpp -DARDUINO_LIB_DISCOVERY_PHASE
                                              /usr/bin/arduino-ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /tmp/arduino_build_475295/preproc/ctags_target_for_gcc_minus_e.cpp
                                              /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_475295/sketch/TopMain.ino.cpp -o /tmp/arduino_build_475295/sketch/TopMain.ino.cpp.o
                                              /usr/bin/avr-gcc -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o /tmp/arduino_build_475295/TopMain.ino.elf /tmp/arduino_build_475295/sketch/TopMain.ino.cpp.o /tmp/arduino_build_475295/../arduino_cache_964216/core/core_archlinux-arduino_avr_uno_33334de5e2d3c2672266eacd2ab9ae3a.a -L/tmp/arduino_build_475295 -lm

                                              j'entends parler de TopMain.ino.cpp , mais pas de TopController.cc

                                              et à la dernire commande de

                                              • /tmp/arduino_build_475295/sketch/TopMain.ino.cpp.o
                                              • /tmp/arduino_build_475295/../arduino_cache_964216/core/core_archlinux-arduino_avr_uno_33334de5e2d3c2672266eacd2ab9ae3a.a
                                              • et -lm
                                              mais rien sur TopChefMachin ni -lrts

                                              -
                                              Edité par michelbillaud 20 mai 2021 à 12:13:21

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                20 mai 2021 à 14:48:54

                                                Si j'ai bien compris le fonctionnement de l'IDE à la compilation, à la toute première compilation après le lancement de l'IDE il va compiler les lib arduino en core.a. Ensuite il va chercher les libs dans un fichier spécifique Arduino ou il y à les fichier head et core (.h/.hh et .c/.cc/.cpp). C'est la première chose que j'ai essayé, mettre les fichier de la lib dans un dossier pour que l'ide aille le chercher et il y va bien car sans ça j'ai une erreu "no such file or directory" sur   "1 | #include <umlrtmain.hh>" et à la fin de la compilation il y à la ligne "Utilisation de la bibliothèque umlrt prise dans le dossier : /home/breizh/Arduino/libraries/umlrt (legacy)"

                                                Tout le output lors de la compilation ça donne ça

                                                /usr/share/arduino/arduino-builder -dump-prefs -logger=machine -hardware /usr/share/arduino/hardware -hardware /home/breizh/.arduino15/packages -tools /usr/share/arduino/tools-builder -tools /home/breizh/.arduino15/packages -libraries /home/breizh/Arduino/libraries -fqbn=archlinux-arduino:avr:uno -ide-version=10813 -build-path /tmp/arduino_build_395912 -warnings=none -build-cache /tmp/arduino_cache_269141 -prefs=build.warn_data_percentage=75 -verbose /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino
                                                /usr/share/arduino/arduino-builder -compile -logger=machine -hardware /usr/share/arduino/hardware -hardware /home/breizh/.arduino15/packages -tools /usr/share/arduino/tools-builder -tools /home/breizh/.arduino15/packages -libraries /home/breizh/Arduino/libraries -fqbn=archlinux-arduino:avr:uno -ide-version=10813 -build-path /tmp/arduino_build_395912 -warnings=none -build-cache /tmp/arduino_cache_269141 -prefs=build.warn_data_percentage=75 -verbose /home/breizh/Documents/Cours/stage/Sujet/TopMain/TopMain.ino
                                                Using board 'uno' from platform in folder: /usr/share/arduino/hardware/archlinux-arduino/avr
                                                Using core 'arduino' from platform in folder: /usr/share/arduino/hardware/archlinux-arduino/avr
                                                Detecting libraries used...
                                                /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard /tmp/arduino_build_395912/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
                                                Alternatives for umlrtmain.hh: [umlrt]
                                                ResolveLibrary(umlrtmain.hh)
                                                  -> candidates: [umlrt]
                                                /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_395912/sketch/TopMain.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
                                                Generating function prototypes...
                                                /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_395912/sketch/TopMain.ino.cpp -o /tmp/arduino_build_395912/preproc/ctags_target_for_gcc_minus_e.cpp -DARDUINO_LIB_DISCOVERY_PHASE
                                                /usr/bin/arduino-ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /tmp/arduino_build_395912/preproc/ctags_target_for_gcc_minus_e.cpp
                                                Compilation du croquis...
                                                /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/umlrt /tmp/arduino_build_395912/sketch/TopMain.ino.cpp -o /tmp/arduino_build_395912/sketch/TopMain.ino.cpp.o
                                                Compiling libraries...
                                                Compiling library "umlrt"
                                                Compiling core...
                                                Using precompiled core: /tmp/arduino_cache_269141/core/core_archlinux-arduino_avr_uno_33334de5e2d3c2672266eacd2ab9ae3a.a
                                                Linking everything together...
                                                /usr/bin/avr-gcc -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o /tmp/arduino_build_395912/TopMain.ino.elf /tmp/arduino_build_395912/sketch/TopMain.ino.cpp.o /tmp/arduino_build_395912/../arduino_cache_269141/core/core_archlinux-arduino_avr_uno_33334de5e2d3c2672266eacd2ab9ae3a.a -L/tmp/arduino_build_395912 -lm
                                                

                                                donc à priorie il compile lui même la lib ce qui serais logique.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 mai 2021 à 15:07:36

                                                  La logique ça serait en effet qu'il compile la bibliothèque, mais il n'a pas l'air de compiler umlrt pour de vrai, parce qu'il n'y a aucune commande lancée

                                                  Compiling library "umlrt"
                                                  
                                                  // AU SECOURS NE ME LAISSEZ PAS TOUT SEUL
                                                  
                                                  Compiling core...
                                                  

                                                  Quand on écrit le Sketch arduino, on importe les bibliothèques explicitement par l'interface, ça copie la bibliothèque dans un répertoire de bricolage, mais c'est pas probablement pas tout.

                                                  Experience, je crée un sketch "blink" (original) et j'inclue, au hasard SD

                                                  - ca me met un include

                                                  je compile. tout va bien. Dans /tmp me retrouve avec

                                                   drwxr-xr-x  2 billaud billaud  4096 mai   20 15:22 arduino_cache_749238
                                                  drwxr-xr-x  6 billaud billaud  4096 mai   20 15:22 arduino_build_577693

                                                  si je vais voir dans le build, avec grep SD *; je vois qu'on en cause dans includes.cache

                                                  [
                                                    {
                                                      "Sourcefile": null,
                                                      "Include": "",
                                                      "Includepath": "/opt/arduino-1.8.13/hardware/arduino/avr/cores/arduino"
                                                    },
                                                    {
                                                      "Sourcefile": null,
                                                      "Include": "",
                                                      "Includepath": "/opt/arduino-1.8.13/hardware/arduino/avr/variants/standard"
                                                    },
                                                    {
                                                      "Sourcefile": "/tmp/arduino_build_577693/sketch/Blink.ino.cpp",
                                                      "Include": "SD.h",
                                                      "Includepath": "/opt/arduino-1.8.13/libraries/SD/src"
                                                    },
                                                    {
                                                      "Sourcefile": "/tmp/arduino_build_577693/sketch/Blink.ino.cpp",
                                                      "Include": "",
                                                      "Includepath": null
                                                    },
                                                    {
                                                      "Sourcefile": "/opt/arduino-1.8.13/libraries/SD/src/File.cpp",
                                                      "Include": "",
                                                      "Includepath": null
                                                    },
                                                    {
                                                      "Sourcefile": "/opt/arduino-1.8.13/libraries/SD/src/SD.cpp",
                                                      "Include": "",
                                                      "Includepath": null
                                                    },
                                                    {
                                                      "Sourcefile": "/opt/arduino-1.8.13/libraries/SD/src/utility/Sd2Card.cpp",
                                                      "Include": "SPI.h",
                                                      "Includepath": "/opt/arduino-1.8.13/hardware/arduino/avr/libraries/SPI/src"
                                                    },
                                                    {
                                                      "Sourcefile": "/opt/arduino-1.8.13/libraries/SD/src/utility/Sd2Card.cpp",
                                                      "Include": "",
                                                      "Includepath": null
                                                    },
                                                    {
                                                      "Sourcefile": "/opt/arduino-1.8.13/libraries/SD/src/utility/SdFile.cpp",
                                                      "Include": "",
                                                      "Includepath": null
                                                    },
                                                    {
                                                      "Sourcefile": "/opt/arduino-1.8.13/libraries/SD/src/utility/SdVolume.cpp",
                                                      "Include": "",
                                                      "Includepath": null
                                                    },
                                                    {
                                                      "Sourcefile": "/opt/arduino-1.8.13/hardware/arduino/avr/libraries/SPI/src/SP
                                                  I.cpp",
                                                      "Include": "",
                                                      "Includepath": null
                                                    }
                                                  ]
                                                  

                                                  c'est pas arrivé là tout seul.

                                                  Si je regarde le répertoires libraries

                                                  /tmp/arduino_build_577693$ tree libraries/
                                                  libraries/
                                                  ├── SD
                                                  │   ├── File.cpp.d
                                                  │   ├── File.cpp.o
                                                  │   ├── SD.cpp.d
                                                  │   ├── SD.cpp.o
                                                  │   └── utility
                                                  │       ├── Sd2Card.cpp.d
                                                  │       ├── Sd2Card.cpp.o
                                                  │       ├── SdFile.cpp.d
                                                  │       ├── SdFile.cpp.o
                                                  │       ├── SdVolume.cpp.d
                                                  │       └── SdVolume.cpp.o
                                                  └── SPI
                                                      ├── SPI.cpp.d
                                                      └── SPI.cpp.o
                                                  
                                                  3 directories, 12 files
                                                  

                                                  Je vois que SD y est, et a été compilé.


                                                  le core.a a été fabrique dans core

                                                  $ tree core
                                                  core
                                                  ├── abi.cpp.d
                                                  ├── abi.cpp.o
                                                  ├── CDC.cpp.d
                                                  ├── CDC.cpp.o
                                                  ├── core.a
                                                  ├── HardwareSerial0.cpp.d
                                                  ├── HardwareSerial0.cpp.o
                                                  ├── HardwareSerial1.cpp.d
                                                  ....
                                                  





                                                  -
                                                  Edité par michelbillaud 20 mai 2021 à 15:32:09

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    20 mai 2021 à 15:16:15

                                                    Effectivement :thinking: Pour mon cas simple avec les led j'ai
                                                    Compiling library "led"
                                                    /usr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/standard -I/home/breizh/Arduino/libraries/led /home/breizh/Arduino/libraries/led/Led.cpp -o /tmp/arduino_build_160010/libraries/led/Led.cpp.o
                                                    

                                                    ou ici, il effectue bien une commande et tout ça sans action particulière de ma part de ma part.

                                                    Si jamais ça peut être plus simple et si tu/vous à le temps on pourrais faire un appel type zoom pour essayer de voir de vive voix ^^ Évidement uniquement si vous avez le temps et l'envie d'aider un jeune freluquet que je suis.

                                                    Dans tout les cas merci encore pour vôtre aide !

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      20 mai 2021 à 15:38:19

                                                      c'est pas que j'ai pas envie, c'est que j'ai pas trop le temps, et que je n'ai pas les trucs sous la main pour regarder en détail. En plus, le bazar pour compiler avec arduino, je ne connais pas vraiment.

                                                      Faut demander à quelqu'un qui sait comment ça marche, parce moi je découvre au fur et à mesure.

                                                       Peut être qu'en faisant un "tree", on verrait ce qui a été compilé ou pas ?

                                                      -
                                                      Edité par michelbillaud 20 mai 2021 à 15:39:47

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        20 mai 2021 à 15:53:47

                                                        voici le tree du fichier après la compilation via arduino-builder (qui fait la même chose que l'IDE)

                                                        .
                                                        ├── Controller.cc
                                                        ├── Controller.d
                                                        ├── Controller.hh
                                                        ├── Makefile
                                                        ├── OnOff.cc
                                                        ├── OnOff.d
                                                        ├── OnOff.hh
                                                        ├── Top.cc
                                                        ├── Top.d
                                                        ├── Top.hh
                                                        ├── TopControllers.cc
                                                        ├── TopControllers.d
                                                        ├── TopControllers.hh
                                                        ├── TopMain.d
                                                        ├── TopMain.ino
                                                        ├── build
                                                        │   ├── build.options.json
                                                        │   ├── core
                                                        │   │   ├── CDC.cpp.d
                                                        │   │   ├── CDC.cpp.o
                                                        │   │   ├── HardwareSerial.cpp.d
                                                        │   │   ├── HardwareSerial.cpp.o
                                                        │   │   ├── HardwareSerial0.cpp.d
                                                        │   │   ├── HardwareSerial0.cpp.o
                                                        │   │   ├── HardwareSerial1.cpp.d
                                                        │   │   ├── HardwareSerial1.cpp.o
                                                        │   │   ├── HardwareSerial2.cpp.d
                                                        │   │   ├── HardwareSerial2.cpp.o
                                                        │   │   ├── HardwareSerial3.cpp.d
                                                        │   │   ├── HardwareSerial3.cpp.o
                                                        │   │   ├── IPAddress.cpp.d
                                                        │   │   ├── IPAddress.cpp.o
                                                        │   │   ├── PluggableUSB.cpp.d
                                                        │   │   ├── PluggableUSB.cpp.o
                                                        │   │   ├── Print.cpp.d
                                                        │   │   ├── Print.cpp.o
                                                        │   │   ├── Stream.cpp.d
                                                        │   │   ├── Stream.cpp.o
                                                        │   │   ├── Tone.cpp.d
                                                        │   │   ├── Tone.cpp.o
                                                        │   │   ├── USBCore.cpp.d
                                                        │   │   ├── USBCore.cpp.o
                                                        │   │   ├── WInterrupts.c.d
                                                        │   │   ├── WInterrupts.c.o
                                                        │   │   ├── WMath.cpp.d
                                                        │   │   ├── WMath.cpp.o
                                                        │   │   ├── WString.cpp.d
                                                        │   │   ├── WString.cpp.o
                                                        │   │   ├── abi.cpp.d
                                                        │   │   ├── abi.cpp.o
                                                        │   │   ├── core.a
                                                        │   │   ├── hooks.c.d
                                                        │   │   ├── hooks.c.o
                                                        │   │   ├── main.cpp.d
                                                        │   │   ├── main.cpp.o
                                                        │   │   ├── new.cpp.d
                                                        │   │   ├── new.cpp.o
                                                        │   │   ├── wiring.c.d
                                                        │   │   ├── wiring.c.o
                                                        │   │   ├── wiring_analog.c.d
                                                        │   │   ├── wiring_analog.c.o
                                                        │   │   ├── wiring_digital.c.d
                                                        │   │   ├── wiring_digital.c.o
                                                        │   │   ├── wiring_pulse.S.d
                                                        │   │   ├── wiring_pulse.S.o
                                                        │   │   ├── wiring_pulse.c.d
                                                        │   │   ├── wiring_pulse.c.o
                                                        │   │   ├── wiring_shift.c.d
                                                        │   │   └── wiring_shift.c.o
                                                        │   ├── includes.cache
                                                        │   ├── libraries
                                                        │   │   └── include
                                                        │   ├── preproc
                                                        │   │   └── ctags_target_for_gcc_minus_e.cpp
                                                        │   └── sketch
                                                        │       ├── Controller.hh
                                                        │       ├── OnOff.hh
                                                        │       ├── Top.hh
                                                        │       ├── TopControllers.hh
                                                        │       ├── TopMain.ino.cpp
                                                        │       ├── TopMain.ino.cpp.d
                                                        │       ├── TopMain.ino.cpp.o
                                                        │       └── interact.hh
                                                        ├── interact.cc
                                                        ├── interact.d
                                                        └── interact.hh
                                                        
                                                        

                                                        la commande c'est ça :

                                                        arduino-builder -compile -verbose -hardware $(ARDUINO)/hardware -tools $(ARDUINO)/tools-builder -libraries $(UML_ARDUINO) -fqbn=$(CART) -build-path build -warnings default TopMain.ino


                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          20 mai 2021 à 16:04:10

                                                          pas de .o donc ils n'ont pas été compilés.

                                                          Il doit y avoir des normes à respecter pour faire une bibliothèque, la zipper  et ensuite ça permet de l'installer proprement

                                                          ---

                                                          Bon suffit d'essayer.

                                                          PREMIERE ETAPE

                                                          J'ai créé une bibliothèque Foo, à partir du répertoire suivant

                                                          $ tree Foo
                                                          Foo
                                                          ├── library.properties
                                                          └── src
                                                              ├── Foo.cpp
                                                              └── Foo.h
                                                          

                                                           les fichiers Foo.h et Foo.cpp ne sont pas passionnants

                                                          $ cat Foo/src/Foo.cpp 
                                                          #include "Foo.h"
                                                          
                                                          int Foo::bar(int a, int b) {
                                                          	return a + b;
                                                          }
                                                          $ cat Foo/src/Foo.h
                                                          #ifndef FOO_H
                                                          #define FOO_H
                                                          
                                                          class Foo {
                                                          public:
                                                          	int bar(int a, int b);
                                                          };
                                                          
                                                          #endif
                                                          

                                                          Plus critique le fichier libraries.properties

                                                          $ cat Foo/library.properties 
                                                          name=Foo
                                                          version=1.0.2
                                                          author=Xyz
                                                          maintainer=Xyz
                                                          sentence=Bla Bla.
                                                          paragraph=Just pour tester
                                                          category=Device Control
                                                          url=http://www.nowhere.com
                                                          architectures=*
                                                          


                                                          et avec ça, j'ai fait un zip

                                                          $ zip -r Foo Foo
                                                          updating: Foo/ (stored 0%)
                                                          updating: Foo/src/ (stored 0%)
                                                          updating: Foo/src/Foo.h (deflated 12%)
                                                          updating: Foo/src/Foo.cpp (deflated 6%)
                                                          updating: Foo/library.properties (deflated 19%)
                                                          


                                                          DEUXIEME ETAPE, je veux l'utiliser

                                                          Je crée un nouveau sketch, et Menu > Croquis > Inclure la Bibliotheque ZIP > et aller selectionner Foo.zip

                                                          Dans le sketch je mets trois conneries histoire de voir que ça importe bien

                                                          #include <Foo.h>
                                                          
                                                          Foo foo;
                                                          
                                                          void setup() {
                                                            int n = foo.bar(1,2);
                                                          }
                                                          
                                                          void loop() {
                                                            // put your main code here, to run repeatedly:
                                                          }

                                                          Je compile : ça passe.


                                                          Dans le build, je retrouve mes petits

                                                          .
                                                          ├── build.options.json
                                                          ├── core
                                                          │   ├── abi.cpp.d
                                                          │   ├── abi.cpp.o
                                                          │   ├── CDC.cpp.d
                                                          │   ├── CDC.cpp.o
                                                          │   ├── core.a
                                                          │   ├── HardwareSerial0.cpp.d
                                                          │   ├── HardwareSerial0.cpp.o
                                                          │...
                                                          │   ├── WString.cpp.d
                                                          │   └── WString.cpp.o
                                                          ├── includes.cache
                                                          ├── libraries
                                                          │   └── Foo
                                                          │       ├── Foo.cpp.d
                                                          │       └── Foo.cpp.o
                                                          ├── preproc
                                                          │   └── ctags_target_for_gcc_minus_e.cpp
                                                          ├── sketch
                                                          │   ├── sketch_may20a.ino.cpp
                                                          │   ├── sketch_may20a.ino.cpp.d
                                                          │   └── sketch_may20a.ino.cpp.o
                                                          ├── sketch_may20a.ino.eep
                                                          ├── sketch_may20a.ino.elf
                                                          ├── sketch_may20a.ino.hex
                                                          ├── sketch_may20a.ino.with_bootloader.bin
                                                          └── sketch_may20a.ino.with_bootloader.hex
                                                          
                                                          5 directories, 64 files
                                                          


                                                          avec ce qui vient de ma bibliothèque au bon endroit.

                                                          -
                                                          Edité par michelbillaud 20 mai 2021 à 16:28:19

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            20 mai 2021 à 16:48:28

                                                            Pour mon cas simple j'ai uniquement mis les fichier (le .h et le .cpp) dans un dossier que j'ai crée et nommé "Led" et il le compiler dans poser problème. L'une des pistes que j'ai explorer est que dans la plupart des libraire Arduino il y a un fichier nommé "librairy.properties" qui contiens pour l'exemple des capteur de température et hydrométrie DHT

                                                            name=DHT sensor library
                                                            version=1.4.2
                                                            author=Adafruit
                                                            maintainer=Adafruit <info@adafruit.com>
                                                            sentence=Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors
                                                            paragraph=Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors
                                                            category=Sensors
                                                            url=https://github.com/adafruit/DHT-sensor-library
                                                            architectures=*
                                                            depends=Adafruit Unified Sensor


                                                            que j'ai donc copier et modifier pour mon cas en

                                                            name=RTS
                                                            version=0.1
                                                            author=
                                                            maintainer=
                                                            sentence=Library for UML-RT.
                                                            paragraph=Library for UML-RT.
                                                            category=
                                                            url=https://gricad-gitlab.univ-grenoble-alpes.fr/hilin/uml-rt-port-for-arduino
                                                            architectures=
                                                            includes=mlrtmain.hh

                                                            Certain champs ne sont pas obligatoire comme les "depends" qui n’apparaît pas dans toute les librairie qui est remplacé par "include"
                                                             Il y'a une options pour inclure une librairie depuis un ZIP via l'ide, il ne fait que deziper la librairie et le mettre dans le bon dossier (ce que j'ai fait de base)

                                                            UPDATE : je viens de voir le message
                                                            ça reviens donc à ce que j'ai fait (j'ai essaie sans le champ "includes" aussi) et du coup j'ai les même erreurs en passant par la...

                                                            UPDATE 2 :

                                                            ça reviens aussi à mon cas simple avec la classe Led qui passe elle aussi.

                                                            -
                                                            Edité par Breizh291 20 mai 2021 à 16:52:14

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              21 mai 2021 à 8:30:45

                                                              "J'ai fait un truc, ça revient au meme", j'y crois quand je le vois.

                                                              Je voudrais voir ce qui se passe quand

                                                              • On a empaqueté correctement la bibliothèque umlrt dans un zip (Avec le fichier de proprietes)
                                                              • On l'importe dans un sketch arduino 
                                                              • On y fait référence dans le code
                                                              • On compile

                                                              Resultat attendu

                                                              • La liste des commandes de compilation
                                                              • La structure du build pour voir où sont passés les fichiers, et qui a été compilé

                                                              -
                                                              Edité par michelbillaud 21 mai 2021 à 8:31:15

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Makefile et librairie

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown