Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32F4][C++/Eclipse] Konwersja przykładu Freddiego na C++

08FEDRA 07 Cze 2015 14:52 1146 13
  • #1 07 Cze 2015 14:52
    08FEDRA
    Poziom 12  

    Stwierdziłem, że do następnego projektu przydałoby się napisać kilka rzeczy w C++, więc:
    :arrow: pobrałem przykład Freddiego ze strony,
    :arrow: zaimportowałem,
    :arrow: zmieniłem nazwę pliku main.c na main.cpp
    :arrow: w makefile ustawiłem USES_CXX = 1
    :arrow: w pliku gpio.h dodałem extern "C"

    Program się skompilował i zlinkował. Wgrałem do mikrokontrolera, dioda miga.
    Problem w tym, że eclipse nie widzi ścieżek do nagłówków (w C było wszystko ok), więc wchodzę w Project -> Properties -> C/C++ General -> Paths and Symbols i chcę dodać ścieżki. No i w polu Languages widzę jedynie Assembly i GNU C, po GNU C++ ani śladu. Od godziny grzebię i szukam co zrobić, żeby móc dodać ścieżki dla C++ i nic. Proszę, pomóżcie.

    Toolchain to GCC ARM Embedded 4.8.

    0 13
  • #2 07 Cze 2015 15:34
    tadzik85
    Poziom 38  

    arm-none-eabi-((gcc)||([gc]\+\+)||(clang))

    Każdy nawias jest ważny. Zmień w Buuild output parser.

    Ustawienia -> c/c++ general-> preprocessor....

    Najlepiej użyć przykładu dla LPC i podmienić pliki.

    0
  • #3 07 Cze 2015 16:01
    08FEDRA
    Poziom 12  

    Zmieniłem i chyba coś jeszcze mam nie tak, bo w Entries mam zupełnie pusto. Spróbowałem też podmienić language.settings.xml z przykładu dla lpc4330 ale też bez rezultatu.

    0
  • #4 07 Cze 2015 17:21
    alagner
    Poziom 25  

    Pozamykać pliki w edytorze, potem rebuild index, make clean, make, rebuild index znowu? Bo czasem to pomaga :)

    0
  • #5 07 Cze 2015 21:32
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Musisz najprawdopodobniej stworzyć nowy projekt, gdyż te udostępnione na stronie są po pierwsze dosyć stare, a po drugie mogły być tworzone jako projekty "tylko C", a nie "C/C++". No chyba że tworzyłeś nowy projekt, ale raczej nie, skoro piszesz o importowaniu...

    File > New > C++ Project > Makefile Project > Empty Project > Cross GCC

    0
  • #6 07 Cze 2015 21:54
    08FEDRA
    Poziom 12  

    Importowałem, ale teraz stworzyłem nowy "makefile project", przekopiowałem pliki ze starego i teraz pewnie muszę coś jeszcze ustawić, bo w "Preprocessor include paths, macros" mam teraz GNU C++ ale symboli i ścieżek żadnych.

    0
  • #7 07 Cze 2015 22:29
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Jeśli stworzyłeś dokładnie taki typ projektu jak podałem (to bardzo istotne), to jeszcze trzeba zmienić to:

    http://stackoverflow.com/a/26094959/157344

    0
  • #8 07 Cze 2015 23:30
    08FEDRA
    Poziom 12  

    Tak, taki sam. Działa! Wpisywałem tam różne cuda i nic, w końcu dałem ścieżkę do toolchaina na początek zmiennej PATH i ruszyło, choć CDT GCC Build Output Parser dalej nie zwraca nic.
    Przy okazji mam za to problem z FPU, bo na floatach procesor leci w mailny, więc kombinuję dalej.

    Edit:

    Przy kompilacji dostaję warninga, choć w eclipse wygląda wszystko poprawnie i linia z tym warningiem jest wyłączona z kompilacji:

    Code:
    Compiling file: main.c
    
    arm-none-eabi-gcc -c -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -std=c11 -g -ggdb3 -fverbose-asm -Wa,-ahlms=out/main.lst  -DSTM32F4XX  -DARM_MATH_CM4  -MD -MP -MF out/main.d -I.  -Iinc main.c -o out/main.o
    In file included from inc/arm_math.h:257:0,
                     from main.c:41:
    inc/core_cm4.h:131:8: warning: #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" [-Wcpp]
           #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"


    Procesor leci w mailiny bo w .lss nie ma inicjalizacji fpu. Jak nie dodam arm_math.h to fpu jest uruchamiane. W edytorze wszystko wygląda poprawnie, ale przy kompilacji coś się sypie...

    0
  • #9 08 Cze 2015 08:10
    Freddie Chopin
    Specjalista - Mikrokontrolery

    08FEDRA napisał:
    Wpisywałem tam różne cuda i nic, w końcu dałem ścieżkę do toolchaina na początek zmiennej PATH i ruszyło

    Musi działać jeśli skonfigurujesz tak jak jest na stackoverflow i jeśli toolchain jest dodany do PATH.

    08FEDRA napisał:
    CDT GCC Build Output Parser dalej nie zwraca nic

    Ten parser zapewne ustawiłeś na "file", więc jeśli chcesz zobaczyć co "sparsował", to musisz oglądać właściwości pliku, a nie projektu.

    08FEDRA napisał:
    linia z tym warningiem jest wyłączona z kompilacji

    W jaki sposób może być wyłączona z kompilacji? To że sobie w Eclipse klikniesz "exclude from build" nie ma żadnego znaczenia dla Makefile'a który jest tutaj jedyną rzeczą sterującą kompilacją.

    08FEDRA napisał:
    Procesor leci w mailiny bo w .lss nie ma inicjalizacji fpu. Jak nie dodam arm_math.h to fpu jest uruchamiane. W edytorze wszystko wygląda poprawnie, ale przy kompilacji coś się sypie...

    Istnieje szansa, że zamiast "STM32F4XX" w kompilacji powinno być zdefiniowane coś bardziej konkretnego, np. "STM32F407xx". Jeśli w edytorze jest OK, to po pierwsze przebuduj index (może tylko było OK, a już nie jest), a po drugie upewnij się, że flagi które wpisałeś do parsera "built-in" są takie same jak te używane w kompilacji, czyli:

    -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -std=c11 [+ flagi dla C++, np. -std=c++11]

    1
  • #10 08 Cze 2015 18:10
    08FEDRA
    Poziom 12  

    Freddie Chopin napisał:
    Ten parser zapewne ustawiłeś na "file", więc jeśli chcesz zobaczyć co "sparsował", to musisz oglądać właściwości pliku, a nie projektu.

    Próbowałem też ustawiać na folder i project - ten sam rezultat.
    Freddie Chopin napisał:
    W jaki sposób może być wyłączona z kompilacji? To że sobie w Eclipse klikniesz "exclude from build" nie ma żadnego znaczenia dla Makefile'a który jest tutaj jedyną rzeczą sterującą kompilacją.

    Źle się wyraziłem, eclipse poprawnie rozpoznaje, że zdefiniowany jest symbol __FPU_PRESENT, kompilator go nie widzi i kompiluje jakby fpu nie było. Jeśli ręcznie dodam __FPU_PRESENT w makefile wszystko gra, ale chyba nie powinno tak być, że muszę sam to definiować, prawda?
    Freddie Chopin napisał:
    Istnieje szansa, że zamiast "STM32F4XX" w kompilacji powinno być zdefiniowane coś bardziej konkretnego, np. "STM32F407xx". Jeśli w edytorze jest OK, to po pierwsze przebuduj index (może tylko było OK, a już nie jest), a po drugie upewnij się, że flagi które wpisałeś do parsera "built-in" są takie same jak te używane w kompilacji, czyli:

    Owszem, podmieniłem CMSIS na nowsze i zdefiniowałem STM32F427X, flagi kopiowałem ctrl+c ctrl+v. Swoją drogą, da się to jakoś zautomatyzować, czy przy każdym projekcie trzeba pamiętać i kopiować to ręcznie?
    Code:
    arm-none-eabi-${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}" -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -std=c++11 -std=c11  -mthumb

    0
  • #11 08 Cze 2015 19:24
    Freddie Chopin
    Specjalista - Mikrokontrolery

    08FEDRA napisał:
    Próbowałem też ustawiać na folder i project - ten sam rezultat.

    Żeby cokolwiek tam było potrzebna jest pełna rekompilacja projektu (make clean + make all).

    08FEDRA napisał:
    Źle się wyraziłem, eclipse poprawnie rozpoznaje, że zdefiniowany jest symbol __FPU_PRESENT, kompilator go nie widzi i kompiluje jakby fpu nie było. Jeśli ręcznie dodam __FPU_PRESENT w makefile wszystko gra, ale chyba nie powinno tak być, że muszę sam to definiować, prawda?

    Po ustawieniu odpowiedniej definicji wszystko powinno działać jak należy, więc niezbyt jestem w stanie Ci pomóc więcej na odległość. Musiałbyś wrzucić tutaj cały swój projekt.

    08FEDRA napisał:
    Swoją drogą, da się to jakoś zautomatyzować, czy przy każdym projekcie trzeba pamiętać i kopiować to ręcznie?

    Nie znam żadnej metody automatyzacji jeśli używasz Makefile'a. Jeśli używasz "managed build" albo wtyczki GNU ARM Eclipse to wtedy masz akurat tą sprawę z głowy. Chyba - sam ich nie używam, więc 100% pewności nie mam (;

    0
  • Pomocny post
    #13 08 Cze 2015 21:41
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Nagłówki od ST lub od ARM są tak walnięte, że najpierw trzeba dołączyć plik stm32f4xx.h, a dopiero potem można dołączać plik arm_math.h

    Wpisy parsera są normalnie widoczne w opcjach poszczególnych plików źródłowych projektu. Ręczne ustawianie ścieżki PATH przez Eclipse raczej jest średnim pomysłem...

    Przy okazji w odpowiedzi na stackoverflow podałem dokładne formułki do wklejenia do parsera, szczególnie do parsera "build output". U Ciebie jest formułka bez zmian, więc w C++ Ci to nie zadziała.

    1
  • #14 08 Cze 2015 22:03
    08FEDRA
    Poziom 12  

    No tak! Przecież w nagłówku od ST jest tworzona definicja __FPU_PRESENT! Ehh ciężko myślę ostatnio ;)
    PATH to taka tymczasowa proteza, bo mój systemowy woła o sprzątanie od jakiegoś czasu, są tam wpisy innych kompilatorów i make się sypie...
    Formułki podmieniłem na 100% musiałem przez nieuwagę przywrócić standardowe...

    W każdym razie działa, pod C++ również. Dzięki!

    Dorzucę projekt, jakby ktoś był kiedyś w potrzebie...

    1
  Szukaj w 5mln produktów