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

STM32 - NVIC błąd kompilacji

kornik280 19 Kwi 2014 12:06 5085 42
  • #1 19 Kwi 2014 12:06
    kornik280
    Poziom 18  

    Chce zrobić obługę przerwania zewnętrznego:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    I mam błąd w Keilu:
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_Init (referred from main.o).
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_PriorityGroupConfig (referred from main.o).
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_SetVectorTable (referred from main.o).
    Co robie nie tak?

    Mam jeszcze jedno pytanie czy obsługe muszę obowiązkowo dawać w pliku include "stm32f10x_it.c czy moge w main.c?[/tex]

    0 29
  • Arrow Multisolution Day
  • #2 19 Kwi 2014 12:44
    mickpr
    Poziom 39  

    Plików *.c się nie powinno inkludować (tylko pliki *.h).
    Co do błędów - widzę, że np. NVIC_Init masz zdefiniowane. Ale czy do pliku main, z którego się do niego odnosisz masz dodaną deklarację tej funkcji (np. w pliku *.h)? Nie wiem - bo nie pokazałeś tego kodu.
    Daj cały projekt - zobaczymy.
    Poczytaj o znaczeniach deklaracji/definicji w języku C/C++ - np. tutaj:
    http://edu.pjwstk.edu.pl/wyklady/pro/scb/PRG2CPP_files/node65.html
    http://msdn.microsoft.com/pl-pl/library/0e5kx78b.aspx

    0
  • #3 19 Kwi 2014 13:33
    kornik280
    Poziom 18  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • Arrow Multisolution Day
  • #4 19 Kwi 2014 13:41
    mickpr
    Poziom 39  

    Jeśli w NVIC_Init wystąpi błąd (np. "Undefined symbol NVIC_PriorityGroupConfig ") to dla kompilatora NVIC_Init nie istnieje.
    Musisz więc "po sznurku" szukać w jakim pliku jest deklaracja owego NVIC_PriorityGroupConfig (strzelam, że w stm32f103_misc.h lub podobnym, którego nie inkludowałeś).
    Szuka się w plikach projektu wciskając w KEIL Ctr+H - zakładka "Find in files".
    Nie podałeś całego katalogu projektu, być może masz źle ustawione jeszcze parę innych rzeczy.

    0
  • #7 19 Kwi 2014 14:16
    mickpr
    Poziom 39  

    tadzik85 napisał:
    brak cmsisa?
    Dobrze zauważył kolega... gałęź CMSIS (jak widać na obrazku) jest nierozwijalna - (brak plusika), więc najprawdopodobniej -... brak CMSIS'a w ogóle w projekcie.
    Dlatego pisałem, żeby autor postu wrzucił cały projekt.

    0
  • #8 19 Kwi 2014 14:18
    tadzik85
    Poziom 38  

    mickpr napisał:
    tadzik85 napisał:
    brak cmsisa?
    Dobrze zauważył kolega... gałęź CMSIS (jak widać na obrazku) jest nierozwijalna - (brak plusika), więc najprawdopodobniej -... brak CMSIS'a w ogóle w projekcie.
    Dlatego pisałem, żeby autor postu wrzucił cały projekt.


    Pomijam fakt ze sam keil przy tworzeniu pewnie się pluł o jego brak.

    0
  • #9 19 Kwi 2014 14:22
    kornik280
    Poziom 18  

    Ale jak coś chce więcej dodać to widzę, że mam core zachaczone, odchaczone mam dsp oraz rtos ale to mnie nie dotyczy?

    STM32 - NVIC błąd kompilacji

    0
  • #10 19 Kwi 2014 14:30
    tadzik85
    Poziom 38  

    Stwórz projekt jeszcze raz. Za mocno namieszałeś tam.

    Albo wrzuć cały spakowany.

    0
  • #11 19 Kwi 2014 14:33
    mickpr
    Poziom 39  

    CMSIS Core - to tylko startup i system i bodajże core_cm3 + skrypt linkera.
    Zaś ty korzystasz z pełnego CMSIS i to jego deklaracji brak.
    Rozwiń tą gałąź "Device"...
    Definicje są (dodałeś sam pewnie), bo ci przechodzi kompilacja.
    Błąd jest w momencie linkowania.

    0
  • #13 19 Kwi 2014 14:45
    tadzik85
    Poziom 38  

    Chcesz używać SPL bo dodałeś symbol ale biblioteka nie dodana.
    Nie załączyłeś plików it.

    I albo używasz SPL albo RTE.

    0
  • #14 19 Kwi 2014 16:10
    kornik280
    Poziom 18  

    Jak dodać SPL? Mam w Keil coś takiego jak Manage Run-time Enviroment i tu wszytko dodaje do projektu co w takim razie mam stąd dodać??
    Co musze mieć w projekcie?

    STM32 - NVIC błąd kompilacji

    0
  • #15 19 Kwi 2014 16:19
    tadzik85
    Poziom 38  

    Peszek. Jest błąd w tym systemie nie dodaje misc.c

    0
  • #16 19 Kwi 2014 16:22
    mickpr
    Poziom 39  

    SPL - Standard Peripherial Library.
    Ponieważ projekt jest w MDK5 (a ja mam zasięg jedynie na MDK4), to nie będę w stanie pomóc z poprawieniem projektu, ale może coś poradzę.

    CMSIS jak wspomniałem to Core + Device Library (osławione złą sławą SPL).
    pliki Device są nazywane w standardzie:
    stm32F102_<tutaj funkcja obsługiwana - czyli 'gpio', 'it', 'spi', 'flash','misc' itd.. >
    Zatem stwórz nowy projekt. Dodaj CMSIS + Device Library + swój plik main i wszystko powinno się udać.
    Nie mieszaj - jak mówi kol. tadzik85 - jednego z drugim.
    Ogólnie rzecz biorąc wszyscy krytykują SPL, ale alternatywą jest ręczne stworzenie własnych bibliotek w oparciu o rejestry (z datasheetem w dłoni - jak to mówią).
    A to chyba dla ciebie jak na razie za trudna sprawa, prawda?

    0
  • #17 19 Kwi 2014 16:23
    kornik280
    Poziom 18  

    Gdzie ten plik mogę znaleść (misc.c)?

    0
  • #18 19 Kwi 2014 16:26
    tadzik85
    Poziom 38  

    kornik280 napisał:
    Gdzie ten plik mogę znaleść?


    Otwórz jakiś plik z spl np GPIO. na jego zakładce kliknij open containing catalog.

    Ale zamiast kombinować z dziwnymi systemami keila. Dodaj ręcznie ściągniętą paczkę z ST.

    3 opcja. Skorzystać z innych funkcji.

    0
  • #19 19 Kwi 2014 16:30
    kornik280
    Poziom 18  

    mickpr napisał:


    A to chyba dla ciebie jak na razie za trudna sprawa, prawda?


    Na razie chce opanować podstawy mieć jakiś efekt, potem bedę starał się unikać spl

    0
  • #20 19 Kwi 2014 16:33
    tadzik85
    Poziom 38  

    kornik280 napisał:
    mickpr napisał:


    A to chyba dla ciebie jak na razie za trudna sprawa, prawda?


    Na razie chce opanować podstawy mieć jakiś efekt, potem bedę starał się unikać spl


    To zacznij od przerabiania przykładów.

    A już ci tłumaczyłem w innym wątku SPL udostępnia przykładu i szablony projektów.

    0
  • #21 19 Kwi 2014 16:44
    kornik280
    Poziom 18  

    Narazie ciągle nie potrafie rozwiązać tego błędu:
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_Init (referred from main.o).
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_PriorityGroupConfig (referred from main.o).
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_SetVectorTable (referred from main.o).

    Już dodałem wszystkie możliwe biblioteki spl które są w keil i dalej nic

    0
  • #22 19 Kwi 2014 16:45
    tadzik85
    Poziom 38  

    kornik280 napisał:
    Narazie ciągle nie potrafie rozwiązać tego błędu:
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_Init (referred from main.o).
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_PriorityGroupConfig (referred from main.o).
    .\stm32.axf: Error: L6218E: Undefined symbol NVIC_SetVectorTable (referred from main.o).

    Już dodałem wszystkie możliwe biblioteki spl które są w keil i dalej nic


    Odpowiedz podałem ci na tacy. Czego jeszcze chcesz?

    0
  • #23 19 Kwi 2014 16:51
    kornik280
    Poziom 18  

    Nie wiem gdzie znaleść ten misc.c?

    0
  • #24 19 Kwi 2014 16:53
    tadzik85
    Poziom 38  

    Moj post nr 18. Czegoś nie zrozumiałeś?

    0
  • #25 19 Kwi 2014 17:05
    kornik280
    Poziom 18  

    Dzięki działa:) Mam jeszcze pytanie czy obsługę przerwania mogę mieć w pliku main.c
    tak jak w avr czy musi to być plik-stm32f10x_it.c?

    1
  • #26 19 Kwi 2014 17:06
    tadzik85
    Poziom 38  

    kornik280 napisał:
    Dzięki działa:) Mam jeszcze pytanie czy obsługę przerwania mogę mieć w pliku main.c
    tak jak w avr czy musi to być plik-stm32f10x_it.c?


    A jakie ma znaczenie gdzie ją umieścisz?

    0
  • #27 19 Kwi 2014 17:09
    kornik280
    Poziom 18  

    W internecie pisali że w tym pliku się trzyma wszystkie obsługi przerwania, ale jak nie trzeba to ok

    0
  • #28 19 Kwi 2014 18:22
    mickpr
    Poziom 39  

    kornik280 napisał:
    zy obsługę przerwania mogę mieć w pliku main.c
    tak jak w avr czy musi to być plik-stm32f10x_it.c?
    Pliki stm32f10x_cośtam to jakby sterowniki urządzeń (GPIO, SPI, NVIC itd...). To są jakby "drajwery", a użycie ich, stworzenie ich konkretnej konfiguracji, inicjację struktur i inne rzeczy powinieneś umieścić w swoich plikach.
    W żadnym wypadku nie polecam grzebać w oryginalnych plikach CMSIS (wyjątek stanowi konfiguracja zegara) - jeśli już z CMSIS korzystasz. Po takiej grzebaninie nie dość, że program łamie ideę CMSIS, to jeszcze znalezienie błędu czy przeniesienie na nowszą wersję CMSIS projektu graniczy z cudem.

    0
  • #29 19 Kwi 2014 18:24
    tadzik85
    Poziom 38  

    mickpr napisał:
    kornik280 napisał:
    zy obsługę przerwania mogę mieć w pliku main.c
    tak jak w avr czy musi to być plik-stm32f10x_it.c?
    Pliki stm32f10x_cośtam to jakby sterowniki urządzeń (GPIO, SPI, NVIC itd...). To są jakby "drajwery", a użycie ich, stworzenie ich konkretnej konfiguracji, inicjację struktur i inne rzeczy powinieneś umieścić w swoich plikach. W żadnym wypadku nie polecam grzebać w oryginalnych plikach CMSIS (wyjątek stanowi konfiguracja zegara) - jeśli już z CMSIS korzystasz.


    I oprócz IT.
    ST wymyśliło jakąś dziwną metodę trzymania obsługi przerwa w osobnym pliku.
    I jako szablon z pustymi obsługami oferuje wymieniony plik.
    Po co nie wiem.

    0
  • #30 06 Lip 2014 21:44
    tomek1_1988
    Poziom 11  

    dopne si troche do tematu z moze troche innym watkiem, mam mianowicie problem z EXTI i dziwnym zachowaniem przerwan zewnetrznych. Otoz po nadejsciu przerwania kod jego obslugi zostaje wkonany ale stany, ktore wystawiam na poszczegole piny (w obsludzie przerwania) nie zostaja podtrzymane na wyjsciu. Tzn naciskam guzik i dioda ktora mam podlaczona na porcie aby sprawdzic poprawnosc kodu zapala sie tylko na chwile i gasnie. Jako zrodlo przerwan zew sa skonfigurowane piny 9 oraz 10 portu E a jako wyjscie piny 14 oraz 15 (rowniez PORTE)-tak jak widocze w kodzie. Ma ktos jakis pomysl dlaczego tak jest? Ponadto co dziwne np jesli daje petle nieskonczona w obsludze przerwania rowniez nie zostaje ona wykonana tylko uC wraca na chamca jakby do maina -jestem troche poczatkujacy w STM-ach...

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0