• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z kompilacją po aktualizacji
#1
Witajcie,

Robiłem projekcik pod BlackPill (STM32). Zainstalowałem odpowiednią płytke itp. Wszystko zadziałało. Kilka dni temu Arduino IDE poinformowało, że jest dostępna aktualizacja softu do płytki, zgodziłem się na update i oczywiście przestało działać. Kompilacja wykłada się z błedem. Widziałem, że w podobnych sytuacjach zwykle proponuje się przeinstalowanie całości - i to zwykle działa, jednak najpierw chciałbym spytać, czy istnieje jakieś krótsze rozwiązanie. Mam następujący log z kompilacji przykładu Blink (poskracałem ścieżki i wywaliłem większość katalogów do -I bo oryginalne linie mają po 3,5KB długości):
Kod:
"bin/arm-none-eabi-g++" -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DVECT_TAB_OFFSET=0x0 -DUSE_FULL_LL_DRIVER -mthumb "@/tmp/arduino_build_26903/sketch/build.opt" -c  -w -std=gnu++17 -ffunction-sections -fdata-sections -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -fno-use-cxa-atexit  "-I/usr/share/arduino/examples/01.Basics/Blink" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/avr" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/stm32" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/stm32/LL"  ".arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/libraries/SrcWrapper/src/stm32/uart.c" -o "/dev/null"
"bin/arm-none-eabi-g++" -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DVECT_TAB_OFFSET=0x0 -DUSE_FULL_LL_DRIVER -mthumb "@/tmp/arduino_build_26903/sketch/build.opt" -c  -w -std=gnu++17 -ffunction-sections -fdata-sections -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -fno-use-cxa-atexit  "-I/usr/share/arduino/examples/01.Basics/Blink" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/avr" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/stm32" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/stm32/LL" ".arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/libraries/SrcWrapper/src/syscalls.c" -o "/dev/null"
Generating function prototypes...
"bin/arm-none-eabi-g++" -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DVECT_TAB_OFFSET=0x0 -DUSE_FULL_LL_DRIVER -mthumb "@/tmp/arduino_build_26903/sketch/build.opt" -c  -w -std=gnu++17 -ffunction-sections -fdata-sections -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -fno-use-cxa-atexit  "-I/usr/share/arduino/examples/01.Basics/Blink" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/avr" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/stm32" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/stm32/LL" "/tmp/arduino_build_26903/sketch/Blink.ino.cpp" -o "/tmp/arduino_build_26903/preproc/ctags_target_for_gcc_minus_e.cpp"
"/usr/bin/arduino-ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "/tmp/arduino_build_26903/preproc/ctags_target_for_gcc_minus_e.cpp"
Kompilowanie szkicu...
"bin/arm-none-eabi-g++" -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DVECT_TAB_OFFSET=0x0 -DUSE_FULL_LL_DRIVER -mthumb "@/tmp/arduino_build_26903/sketch/build.opt" -c {compiler.optimization_flags} -Wall -Wextra -std=gnu++17 -ffunction-sections -fdata-sections -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -fno-use-cxa-atexit -MMD "-I/usr/share/arduino/examples/01.Basics/Blink" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/avr" "-I.arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/cores/arduino/stm32" "/tmp/arduino_build_26903/sketch/Blink.ino.cpp" -o "/tmp/arduino_build_26903/sketch/Blink.ino.cpp.o"
arm-none-eabi-g++: warning: {compiler.optimization_flags}: linker input file unused because linking not done
arm-none-eabi-g++: error: {compiler.optimization_flags}: linker input file not found: No such file or directory
Użycie biblioteki SrcWrapper w wersji 1.0.1 z folderu: .arduino15/packages/STMicroelectronics/hardware/stm32/2.7.1/libraries/SrcWrapper
exit status 1
Błąd kompilacji dla płytki Generic STM32F4 series.

W ostatniej linii kompilacji pojawia się tekst {compiler.optimization_flags} - podejrzewam że to miało być podmienione na jakieś opcje przez IDE ale coś nie wyszło.

PS. Dziwi mnie też końcówka tych polecen kompilacji  -o /dev/null  ? Przecież to bez sensu - wynik kompilacji do wyrzucenia?
Czy któs próbował używać bibliotek Arduino bez całego systemu Arduino - po prostu makefile?
 
Odpowiedź
#2
Trzeba wyłączyć silnik, wysiąść, trzasnąć drzwiami i potem próbować odpalić auto na nowo.
Przeinstalowanie to jednak jest ta krótsza droga, bo skoro powinno się kompilować, to coś z instalacją nie pykło. Czasami nie można zrobić updatu bez modyfikacji swoich programów, niektóre funkcje są wyrzucane z core, albo zaczynają działać inaczej, wtedy downgrade jest szybszą opcją.
Najgorzej jak nowa wersja dodaje uC, którego akurat Ci brakowało, obsługę wymarzonego programatora, a przy okazji coś znika i istniejące programy przestają działać, wtedy warto walczyć.
 
Odpowiedź
#3
Bład powodowało przekazanie dziwnego tekstu {compiler.optimization_flags} jako argumentu do kompilacji, więc postanowiłem poszukać napisu optimization_flags w plikach arduino. W ukrytym podkatalogu ".arduino15", w katalogu domowym, poleceniem grep -rn optimization_flags * znalazłem plik packages/STMicroelectronics/hardware/stm32/2.7.1/platform.txt, który kilkukrotnie zawierał poszukiwany ciąg znaków. Plik jest nieduży i tekstowy. W okolicy linii 23 znajdowała się następująca treść:
Kod:
# EXPERIMENTAL feature: optimization flags
#  - this is alpha and may be subject to change without notice
compiler.optimization_flags={compiler.optimization_flags}
compiler.optimization_flags.release={build.flags.optimize} {build.flags.debug}
compiler.optimization_flags.debug=-Og -g
Trochę wygląda to podejrzanie bo taki sam identyfikator jest po obu stronach znaku =. Zamieniłem tą linię na swoją, ustawiając jakąś stała opcje optymalizacji, konkretnie -O2 (skoro nie korzystam z debuggera)

Kod:
# EXPERIMENTAL feature: optimization flags
#  - this is alpha and may be subject to change without notice
#compiler.optimization_flags={compiler.optimization_flags}
compiler.optimization_flags=-O2
compiler.optimization_flags.release={build.flags.optimize} {build.flags.debug}
compiler.optimization_flags.debug=-Og -g
Oczywiście oryginał zachowałem w komentarzu.
Kompiluje przykład Blink i ... działa!

Oczywiście edytowany plik należy do pakietu opisującego procki STM, ma również adnotacje, że to wersja eksperymentalna, więc może jakiś kolejny update poprawi problem. Jak ktoś się jeszcze nie zorientował - używam Linuxa, stąd takie ścieżki i polecenia.
 
Odpowiedź
#4
Dzięki za podzielenie się rozwiązaniem.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości