logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

STM32F103 uVision5 error: #20: identifier is undefined

bartosz.tarnowski 01 Lis 2017 14:01 903 7
REKLAMA
  • #1 16793648
    bartosz.tarnowski
    Poziom 17  
    Posty: 418
    Pomógł: 26
    Ocena: 30
    Witam,
    Po rozbudowie projektu i dodaniu wielu plików źródłowych i nagłówkowych pojawił mi się dziwny problem.

    STM32F103 uVision5 error: #20: identifier is undefined

    Oczywistym powodem takiego błędu jest brak pliku nagłówkowego ale u mnie ten plik nagłówkowy jest jawnie dodany.

    STM32F103 uVision5 error: #20: identifier is undefined


    I teraz jeśli utworze nowy plik nagłówkowy i do niego skopiuję definicję nie widzianej w sofcie nazwy i zainkluduje to do pliku źródłowego w którym kompilator widzi problem to zgłasza redefinicję - nagle widzi obie definicje.
    W czym może być problem, czyżby Keil zrobił jakaś niedoróbkę ?

    STM32F103 uVision5 error: #20: identifier is undefined

    Przyjmuję że kolejność dodawania ścieżek do lokalizacji z headerami nie ma znaczenia
    STM32F103 uVision5 error: #20: identifier is undefined
  • REKLAMA
  • #2 16795119
    mongoł2000
    Poziom 18  
    Posty: 623
    Pomógł: 15
    Ocena: 175
    Czy masz tam plik stm32....._conf.h w którym są na górze wszystkie używane headery? Część powinna być zakomentowana, a część nie. Spróbuj też usunąć #IFDEF w tym pliku .....hal_def.h, być może już gdzieś wcześniej był użyty ten plik nagłówkowy.
  • REKLAMA
  • #3 16795259
    Konto nie istnieje
    Konto nie istnieje  
  • #4 16795548
    bartosz.tarnowski
    Poziom 17  
    Posty: 418
    Pomógł: 26
    Ocena: 30
    usuniecie
    #ifndef __STM32F1xx_HAL_DEF
    #define __STM32F1xx_HAL_DEF

    skutkuje zgłaszaniem błędu ... already declared in current scope co widac ponizej
    STM32F103 uVision5 error: #20: identifier is undefined

    Plik STM32F1xx_HAL_CONF mam zaincludowany

    STM32F103 uVision5 error: #20: identifier is undefined

    Pozostaje mi rozrysować drzewo includowania się plików nagłówkowych
  • REKLAMA
  • #5 16795568
    Konto nie istnieje
    Konto nie istnieje  
  • #6 16795595
    bartosz.tarnowski
    Poziom 17  
    Posty: 418
    Pomógł: 26
    Ocena: 30
    ....
    wpadłem na lepszy pomysł.
    Moge wykorzystać dyrektywe #warning
    Wstawiłem ją w tym pliku nagłówkowym którego braku widoczności czepia się kompilator.
    Efekt poniżej - ten plik jest dodawany az 55 razy a i tak sypie błędami ze nie widzi zdefiniowanego typedef

    STM32F103 uVision5 error: #20: identifier is undefined
  • REKLAMA
  • #7 16795611
    Konto nie istnieje
    Konto nie istnieje  
  • #8 16795678
    bartosz.tarnowski
    Poziom 17  
    Posty: 418
    Pomógł: 26
    Ocena: 30
    To są właściwie 3 połączone projekty.
    FAT utworzony z CUBE oraz dwa inne jeden na HAL drugi starszy na CMSIS.
    Pierwsze scalenie dwóch projektów przebiegło pomyślnie.
    Teraz dołożyłem USB mass storage na CMSIS.

    Porządek oczywiście że potrzebny, a i okazja jest aby wgryźć się w logikę i kolejność includowania, niby to takie proste a nie do końca.


    Dodano po 5 [godziny] 45 [minuty]:

    Faktycznie pominąłem pewną definicję.
    kolejna sprawa to błąd widoczny poniżej

    STM32F103 uVision5 error: #20: identifier is undefined

    Rozrysowałem strukturę includowania headerów.

    STM32F103 uVision5 error: #20: identifier is undefined

    Na czerwono zaznaczyłem miejsca w których kompilator sygnalizuje "error in include chain". Nie widzi miedzy innymi definicji typów peryferii XXX_TypeDef a tymczasem jak widać na załączonej strukturze headery peryferii znajdują się w łańcuchu includowania. Strzałki wskazują kierunek dołączenia headera.

    Natomiast konkretne błedy z listy odnoszą się do poszczególnych headerów peryferii jak widać poniżej

    STM32F103 uVision5 error: #20: identifier is undefined

Podsumowanie tematu

✨ Użytkownik napotkał błąd kompilacji (#20: identifier is undefined) w projekcie opartym na STM32F103 po dodaniu nowych plików źródłowych i nagłówkowych. Problemy mogą wynikać z nieprawidłowego dołączania plików nagłówkowych oraz z błędów w definicjach typów. Użytkownik zauważył, że usunięcie strażników (#ifndef) prowadzi do błędów redefinicji. Wskazano na potrzebę uporządkowania projektu oraz sprawdzenia struktury dołączania plików nagłówkowych, co może pomóc w rozwiązaniu problemu. Użytkownik rozrysował drzewo includowania, aby zidentyfikować błędy w łańcuchu dołączania.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA