Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Eclipse Workbench, jak dodać generację pliku assemblera?

mas24 11 Gru 2016 11:29 513 23
  • #1 11 Gru 2016 11:29
    mas24
    Poziom 16  

    Witam,

    Jakiś czas temu ściągnąłem sobie Eclipse Workbench, by móc programować mikrokontrolery ARM, jednak w generowanych podczas kompilacji plikach brakuje mi pliku *.S czy *.iss z assemblerową reprezentacją programu. Wszyscy wiemy, jak pomocny jest ten plik. Mi chodzi głównie o to, żeby sprawdzić, gdy po zadeklarowaniu zmiennych typu "float", kompilator automatycznie uruchomi i skonfiguruje FPU (procek STM32F429ZI).

  • #3 11 Gru 2016 11:54
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Nie prościej po prostu uruchomić używanie float dokładnie dwoma flagami kompilatora? Jak je dodasz, to na pewno użyje FPU, nie trzeba tego po nim sprawdzać.

    -mfloat-abi=hard -mfpu=fpv4-sp-d16

  • #5 11 Gru 2016 12:05
    mas24
    Poziom 16  

    Nie wiem, czy to tu wpisać, bo jak próbuję, to co Freddie to wywala błąd podczas kompilacji. Wstawiam tu domyślne opcje, które skopiowałem z programu przed zmianami:

    arm-none-eabi-objcopy -O binary "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.bin"; arm-none-eabi-size "${BuildArtifactFileName}"

  • #6 11 Gru 2016 12:26
    Freddie Chopin
    Specjalista - Mikrokontrolery

    mas24 napisał:
    Nie wiem, czy to tu wpisać, bo jak próbuję, to co Freddie to wywala błąd podczas kompilacji.

    Ręce opadają... Zamiast wrzucić jaki to dokładnie błąd to "nie działa"...

    Piotrus_999 napisał:
    Dodaj takie opcje:

    -Wa -adhlns="$@.lst"

    Pytanie było raczej o listing assemblerowy całej aplikacji, a nie o listingi poszczególnych plików.

  • #7 11 Gru 2016 13:02
    mas24
    Poziom 16  

    Dobra, już się poprawiam.

    Od razu mówię, że nie znam się tak bardzo na dyrektywach kompilatora i poruszam się po omacku, dlatego frazę Freddiego wpisałem tak:

    arm-none-eabi-objcopy -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O binary "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.bin"; arm-none-eabi-size "${BuildArtifactFileName}"

    co zaowocowało błędem:

    Kod: text
    Zaloguj się, aby zobaczyć kod

  • #8 11 Gru 2016 13:08
    Piotrus_999
    Poziom 39  

    W SW możesz to sobie zrobić z poziomu pluginu

    Eclipse Workbench, jak dodać generację pliku assemblera?

    Freddie Chopin napisał:
    Pytanie było raczej o listing assemblerowy całej aplikacji, a nie o listingi poszczególnych plików.

    A jaka to dla niego róznica - nota bene ciekaw jestem jak to zrobić?

    Dodano po 3 [minuty]:

    mas24 napisał:
    arm-none-eabi-objcopy -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O binary "Synth_429ZI_LCD.elf" "Synth_429ZI_LCD.bin"


    A kto Cię prosił aby to tu wstawiać?

  • #9 11 Gru 2016 13:11
    Freddie Chopin
    Specjalista - Mikrokontrolery

    mas24 napisał:
    Od razu mówię, że nie znam się tak bardzo na dyrektywach kompilatora i poruszam się po omacku, dlatego frazę Freddiego wpisałem tak:

    Próbujesz zmodyfikować krok do generacji pliku .bin. Cokolwiek tam nie wpiszesz, nie tędy droga. Dwie opcje jaki Ci podałem należy podać do kompilacji i linkowania _WSZYSTKICH_ plików - wtedy na pewno zostanie użyte FPU.

    Piotrus_999 napisał:
    A jaka to dla niego róznica - nota bene ciekaw jestem jak to zrobić?

    Generacja plików .lst znacząco zwalnia kompilację, a do tego same te pliki są jakieś dziwne. Pełny listing programu jest dużo ciekawszy i szybciej się generuje.

    Jak to zrobić? Poszukać? W dowolnym moim projekcie udostępnionym gdziekolwiek zawsze jest to włączone.

    arm-none-eabi-objdump --demangle -S output/test/distortosTest.elf > output/test/distortosTest.lss

  • #12 11 Gru 2016 13:58
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Zgodni z nazwą - zamienia zmanglowane nazwy C++ na postać strawną dla człowieka. W efekcie w pliku można znaleźć "080133f8 <distortos::Semaphore::wait()>:" zamiast "080133f8 <_ZN9distortos9Semaphore4waitEv>:"

  • #14 11 Gru 2016 19:59
    mas24
    Poziom 16  

    Kolega Piotrus_999 zapodał zrzut ekranu z opcjami, mam tak samo, i u mnie też jest ustawione tam FPU w sekcji "Floating point hardware" jest parametr podany przez Freddiego: "fpv4-sp-d16", więc powinienem mniemać, że FPU jest włączone?

  • #15 11 Gru 2016 20:17
    Piotrus_999
    Poziom 39  

    mas24 napisał:
    Kolega Piotrus_999 zapodał zrzut ekranu z opcjami, mam tak samo, i u mnie też jest ustawione tam FPU w sekcji "Floating point hardware" jest parametr podany przez Freddiego: "fpv4-sp-d16", więc powinienem mniemać, że FPU jest włączone?


    Mniemać możesz. Teraz jedna uwaga - masz tylko 32bitowe floaty. Pamiętaj aby przypadkiem nie stosowac double (np. literały muszą być zakończone "f" np 5.45f

    1. Czy masz debugger. Rozumiem że masz jakąś płytkę nucleo lub discovery.

    2. Jezeli masz to zatrzymaj w na jakiejkolwiek linii z działaniami na floatach i zobacz w okienku dissasembly.
    Jezeli się nie wyświetli to Eclipse Workbench, jak dodać generację pliku assemblera?
    Eclipse Workbench, jak dodać generację pliku assemblera?
    i powinno
    Eclipse Workbench, jak dodać generację pliku assemblera?

  • #16 11 Gru 2016 20:39
    mas24
    Poziom 16  

    Próbowałem uruchomić Debug, ale Windows wszczął alert zabezpieczeń, zezwoliłem, ale teraz za każdym razem wywala błąd w okienku System Workbench:

    Kod: text
    Zaloguj się, aby zobaczyć kod

  • #17 11 Gru 2016 20:45
    Piotrus_999
    Poziom 39  

    Najwierw skonfiguruj sobie środowisko. Wyłacz wszystkie firewalle i inne aby nie mieć problemów. Zrestartuj windows-y, zrestartuj płytkę.


    PS Jak go programujesz - rozumiem że nie przez GDB

  • #18 11 Gru 2016 20:54
    mas24
    Poziom 16  

    Firewall też się zgłosił, ale zezwoliłem. Skonfigurowałem jeden z pinów, kazałem mu go ustawić przed całym zadaniem z floatami, i zerować po zadaniu. Całe to zadanie wykonuje się w 1.8 us, po czym pośrednio mogę stwierdzić, że bez FPU tak szybko by nie policzył, nawet ze 180MHz zegara.

  • #19 11 Gru 2016 20:59
    Piotrus_999
    Poziom 39  

    mas24 napisał:
    Firewall też się zgłosił, ale zezwoliłem. Skonfigurowałem jeden z pinów, kazałem mu go ustawić przed całym zadaniem z floatami, i zerować po zadaniu. Całe to zadanie wykonuje się w 1.8 us, po czym pośrednio mogę stwierdzić, że bez FPU tak szybko by nie policzył, nawet ze 180MHz zegara.


    Wiesz - zaskakujesz mnie. Siadając do projektu nie wyobrażam sobie mieć nie skonfigurowane środowisko. Czas spędzony nad jego skonfigurowaniem i odpaleniem zwraca się pewnie ze 100 razy w trakcie pracy.

  • #20 11 Gru 2016 21:02
    mas24
    Poziom 16  

    Po pierwsze nie do końca się na tym znam. Chcę po prostu programować na ARM, wiem, ze jeszcze dużo nauki przede mną.
    Po drugie, nie jest to na razie jakiś specjalny projekt, a próby rozeznania się co i jak.
    A po trzecie używam GDB, bo podczas kompilacji tak mi pisze, zanim wywali błąd:

    Kod: text
    Zaloguj się, aby zobaczyć kod

  • #22 13 Gru 2016 16:46
    mas24
    Poziom 16  

    To się odbywa trochę dziwnie. Po połączeniu Nucleo z PCtem, zgłasza się jak napęd wymienny i przegrywam (drag&drop) na niego plik wynikowy BIN. Z Nucleo F072 mam tak samo, ale Discovery z F429 już normalnie,z poziomu Workbencha.

  • #24 18 Mar 2017 21:45
    mas24
    Poziom 16  

    Nic więcej nie wymyślę, więc zamykam temat.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME