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.

[STM32] biblioteki CMSIS - modyfikacja pliku makefile kolegi Freediego Chopina

r06ert 12 Gru 2011 17:51 3345 15
  • #1 12 Gru 2011 17:51
    r06ert
    Poziom 25  

    Witam wszystkich,

    W ostatni weekend wziąłem się za STMy. Przygotowałem sobie środowisko Eclipse do pracy z mikrokontrolerami STM32 wraz z kompilatorem CodeSourcery. Stworzyłem swój szablon projektu do mojego STMa utworzony na podstawie przykładu projektu stm32_blink_led kolegi Freediego Chopina.

    Chciałem teraz do tego dołożyć biblioteki CMSIS, żeby bez grzebania w rejestrach móc korzystać z peryferiów mikrokontrolera. Na samym końcu artykułu Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3 autor udostępnia szablon projektu dla stm32 z bibliotekami CMSIS. Niestety bez makefile bo tę sprawę u niego załatwia plugin GNU ARM do Eclipse. Mimo prób i szczerych chęci nie udało mi się zainstalować tego plugina. Próbowałem kilku róznych wersji wtyczki na kilku wersjach Eclipse. No ale nie istotne.

    W związku z tym proszę o pomoc w dostosowaniu makefila z projektu stm32_blink_led tak, żebym mógł używać biblioteki CMSIS. Niestety w opcjach projektu nie mogę ustawić ścieżek dla linkera, ani zmienić innych opcji.

    Ponad to, chciałem zapytać się bardziej doświadczonych kolegów, co sądzą ogólnie o bibliotekach CMSIS i czy warto się w nie pchać? Czy może lepiej sobie je darować i samemu przebrnąć przez datasheeta i zrobić swoje? Swoją drogą, skąd ściągnąć najnowszą wersję bibliotek?

    Z góry dzięki. Pozdrawiam.

    r06er

    0 15
  • #3 12 Gru 2011 18:56
    r06ert
    Poziom 25  

    tymon_x, tak masz rację, pomyliłem się. Chodzi mi oczywiście o biblioteki dostarczone przez STM. Czy warto brać je pod uwagę?

    EDIT:
    Przyznam szczerze, że z STMami i w ogóle z corteksami zabawę zacząłem dopiero w sobotę. Przyznam również, że myślałem, że CMSIS to to samo co biblioteki od STMa. Poszperałem i widzę, że te biblioteki generalnie są średnio oceniane ;)

    0
  • #4 12 Gru 2011 19:09
    Freddie Chopin
    Specjalista - Mikrokontrolery

    W Makefile musisz dodać katalogi w których jest kod (jako katalogi z kodem), katalogi w których są nagłówki (jako include dirs) i do tego jeszcze chyba jakieś dziwaczne definicje których ta biblioteka używa. Ewentualnie możesz kod biblioteki (i nagłówki) wrzucić do katalogu projektu i też będzie OK.

    Generalnie - z tego co pamiętam - to wystarczyło.

    A bibliotekę oceniam na mocne -1 w skali 0 do 10 <: https://www.elektroda.pl/rtvforum/viewtopic.php?t=1478833

    4\/3!!

    0
  • #5 12 Gru 2011 19:31
    Pituś Bajtuś
    Poziom 28  

    Pozwolę sobie podpiąć się pod temat i zaptyać, czy komuś udało się zmusić makefila od Freddiego do działania w przypadku kompilacji równoległej? Bo o ile klasycznie działa wyśmienicie, to równolegle już nie.

    0
  • #6 12 Gru 2011 19:44
    r06ert
    Poziom 25  

    Freddie Chopin, zgodnie z tym co jest napisane w Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3 trzeba ustawić:
    - dla preprocesora definicje USE_STDPERIPH_DRIVER (jeżeli chcę korzystać z bibliotek STMa) oraz STM32F10X_MD_VL (w przypadku mojego mikrokontrolera). Ty w swoim makefilu masz już definicję STM32F10X_MD. Domyślam się, że dzięki tym definicjom nie muszę już nic odkomentowywać w dostarczonych bibliotekach?
    - oraz ścieżki do plików nagłówkowych i źródłowych lub wrzucić wszystko do katalogu głównego projektu. Ale chciałbym trzymać jakiś porządek w moich projektach, więc jak dodawać nowe ścieżki? Przypomnę, tylko że w "properties" projektu nie mam takiej możliwości w moim przypadku.

    Może się zbłaźnię, ale jak to zrobić? :) Czy gdzieś można poczytać coś więcej o zasadach tworzenia makefila? Domyślam się, że takie modyfikacje to pierdoły, ale mnie skutecznie zblokowały. ;)

    Skąd ciągnąć najnowszą wersję CMSIS (jeżeli wychodzą nowsze wersję) oraz biblioteki StdPeriph_Lib? Chciałbym ściągnąć całość i po prostu nie używać bibliotek dostarczonych przez STMa.

    EDIT
    Przepraszam Freddie Chopin, że przekręciłem twój nick.

    0
  • #7 12 Gru 2011 19:47
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Ale czego Ty chcesz szukać w opcjach projektu, skoro mowa jest o edycji Makefile'a?

    Code:
    # include directories (absolute or relative paths to additional folders with
    
    # headers, current folder is always included)
    INC_DIRS =

    ...

    # additional directories with source files (absolute or relative paths to
    # folders with source files, current folder is always included)
    SRCS_DIRS =


    Definicje dodajesz wszystkie których potrzebujesz, czyli jeszcze tą jedną brakującą musisz dopisać.

    Twórcą CMSIS jest ARM, więc należałoby szukać gdzieś na ich stronach, ale nie jestem pewien czy uda się to tam znaleźć... Chyba prościej wyciąć co trzeba z biblioteki od ST.

    4\/3!!

    0
  • #8 12 Gru 2011 20:40
    r06ert
    Poziom 25  

    Poległem :( Mimo usilnych starań nie kompiluje mi się ten kod. Z tego co przeczytałem jest on stworzony na podstawie twojego projektu z tym, że nie posiada makefila:
    Szablon projektu dla Cortex-M3 STM32 F103RB

    Dodałem tylko twój makefile i poedytowałem na różne sposoby ścieżki, ale cały czas krzyczy, że brakuje plików nagłówkowych. Czy mógłbyś proszę zerknąć na ten projekt i podpowiedzieć jak to ugryźć?

    0
  • #9 12 Gru 2011 20:51
    rajszym
    Poziom 19  

    Najnowsza wersja CMSIS(dla rdzenia) jest na: OnARM.com

    0
  • Pomocny post
    #10 12 Gru 2011 21:02
    ziajek00
    Poziom 12  

    r06ert napisał:

    Dodałem tylko twój makefile i poedytowałem na różne sposoby ścieżki, ale cały czas krzyczy, że brakuje plików nagłówkowych.


    No to może warto by było podać ścieżki do tych plików? ;)
    Properties -> C/C++ General -> Paths and Symbols

    Dalej już samodzielnie.

    0
  • #11 12 Gru 2011 22:46
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Jak korzystasz z Makefile'a to musisz dodać ścieżki do plików nagłówkowych w Makefile - w pozycji którą przytoczyłem wyżej.

    A jak chcesz konkretnej pomocy, to wrzucaj konkretne informacje - "poedytowałem ale mam jakieś błędy" raczej nie przybliży Cię do otrzymania pomocy. Konkrety, kod, błędy, itd.

    4\/3!!

    0
  • #12 13 Gru 2011 08:53
    r06ert
    Poziom 25  

    Tak jak podejrzewałem, błąd popełniłem w jaskiejś pierdole o której nie miałem pojęcia. Problem wynikał z mojej nieznajomości tworzenia plików makefile i polegał na błędnym dodawaniu ścieżek. Zamiast tak dodawać ścieżki:

    Code:
    # include directories (absolute or relative paths to additional folders with
    
    # headers, current folder is always included)
    INC_DIRS =  ${CWD}/Libraries/STM32F10x_StdPeriph_Driver/inc/
    INC_DIRS += ${CWD}/Libraries/CMSIS/Core/CM3/
    INC_DIRS += ${CWD}/Setup/

    # additional directories with source files (absolute or relative paths to
    # folders with source files, current folder is always included)
    SRCS_DIRS = ${CWD}/STM32F100_template/Libraries/CMSIS/Core/CM3/
    SRCS_DIRS += ${CWD}/STM32F100_template/Libraries/STM32F10x_StdPeriph_Driver/src/
    SRCS_DIRS += ${CWD}/Setup/


    to robiłem to w ten sposób (bez "+"):
    Code:
    # include directories (absolute or relative paths to additional folders with
    
    # headers, current folder is always included)
    INC_DIRS = ${CWD}/Libraries/STM32F10x_StdPeriph_Driver/inc/
    INC_DIRS = ${CWD}/Libraries/CMSIS/Core/CM3/
    INC_DIRS = ${CWD}/Setup/

    # additional directories with source files (absolute or relative paths to
    # folders with source files, current folder is always included)
    SRCS_DIRS = ${CWD}/STM32F100_template/Libraries/CMSIS/Core/CM3/
    SRCS_DIRS = ${CWD}/STM32F100_template/Libraries/STM32F10x_StdPeriph_Driver/src/
    SRCS_DIRS = ${CWD}/Setup/


    Jeżeli ktoś zastawiałby się nad kierunkiem slashów w ścieżkach to dla wyjaśnienia podpowiem, że korzystam z linuksa.

    Po kompilacji nic nierobiący kod waży ok. 2kB więc to może być to. :) Jak wrócę do domu to sprawdzę to co mi się kompiluje. Wstępnie dziękuję kolegom za pomoc. Jeżeli wszystko będzie ok to rozdam punkty w przeciwnym wypadku pomęczę jeszcze trochę. ;)

    0
  • #13 13 Gru 2011 09:31
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #14 13 Gru 2011 23:19
    r06ert
    Poziom 25  

    Została mi jeszcze jedna rzecz do zrobienia. W projekty na których się wzorowałem stworzone zostały dla rodziny STM32F10x MD, ja mam zestawik ewaluacyjny z układem z rodziny STM32F10X MD VL. Zauważyłem, że poza oczywiście peryferiami, rozmiarami pamięci i maksymalną prędkością taktowania różnią się również adresami przerwań.

    Czy żeby to pozmieniać to wystarczy w projekcie stm32_blink_led kolegi Freddiego Chopina wprowadzić zmiany w tablicy wektorów w pliku vectors.c i ewentualnie dopisać swoje prototypy funkcji? Czy będę musiał również w związku z tą zmianą zmieniać coś w skrypcie linkera?

    Czy ktoś korzystał z stlinka pod Ubuntu? Ja znalazłem jedynie informację że trzeba się pobawić i wgrać mu alternatywne oprogramowanie. Może ostatnio coś się zmieniło w temacie?

    Z góry dzięki, pozdrawiam.

    0
  • Pomocny post
    #15 13 Gru 2011 23:23
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia.

    4\/3!!

    0