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

STM32 Nucleo-F401RE / ILI9341 SPI LCD / SW4STM32 - nie kompilujący się kod

andrzej381 20 Mar 2019 16:37 885 13
REKLAMA
  • #1 17855745
    andrzej381
    Poziom 2  
    Posty: 2
    Witam, usiłuję skompilować projekt jak w temacie z youtuba: MYaqoobEmbedded (opublikowany 9.12.2018)
    https //www youtube com/watch?v=gd-BHZ5ZyPc (zamiast : i . spacja bo nie mam uprawnień do linków - 1x :, 2x .)

    Pliki projektu zamieszczam w załączniku poniżej

    Bardzo mnie on zainteresował bo mam wszystkie elementy składowe aby go uruchomić.

    Niestety kompilator generuje błędy z którymi nie mogę sobie poradzić.
    I tak np. :
    gdy mam zdefiniowaną funkcję w pliku MY_ILI9341.c :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    kompilator wyrzuca błąd dla pętli for... że nie wolno porównywać [comparison between pointer and integer]. Próbowałem rzutować wyrażenia ale to nic nie daje. Nie mam już pomysłu.
    Innym z błędów jest błąd związany z deklaracją i definicją funkcji:
    - w pliku nagłówkowym MY_ILI9341.h znajduje się deklaracja funkcji:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    - w pliku MY_ILI9341.c jej definicja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    kompilator zgłasza błąd:
    'fillCircleHelper' declared 'static' but never defined [-Wunused-function] Dlaczego, skoro jest i deklaracja i definicja. Próbowałem zadeklarować i zdefiniować swoją funkcję ze zwracanymi parametrami static void i otrzymałem ten sam błąd.

    Projekt nie kompiluje się, niestety. Jest jeszcze kilka następnych błędów kompilatora ale o tym później jeśli znajdzie się ktoś aby mi pomóc (jestem nowicjuszem). Proszę o pomoc.

    21.03.2019 - Zgodnie z sugestią moderatora załączam spakowany projekt Nucleo411.._1.zip (10.32 MB)Musisz być zalogowany, aby pobrać ten załącznik.

    Usunąłem link ponieważ zamieściłeś projekt w załączniku.
    Mod: dondu
  • REKLAMA
  • #2 17856054
    Konto nie istnieje
    Poziom 1  
  • #3 17856067
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    khoam napisał:
    A czy została ta funkcja użyta chociaż raz w programie? Bo jeśli nie, to kompilator sygnalizuje ostrzeżenie, a nie błąd.

    Nie o to chodzi, tylko o to, że deklaracja funkcji ze słówkiem "static" jest w plik _nagłówkowym_, co jest kompletnie bez sensu, a w efekcie deklaracja tej funkcji znajduje się w każdym pliku źródłowym który z tego nagłówka korzysta.
  • REKLAMA
  • #4 17856085
    Konto nie istnieje
    Poziom 1  
  • #6 17856290
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #7 17856353
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    khoam napisał:
    Oznacza to, że plik MY_ILI9341.h nie jest włączany do MY_ILI9341.c albo jest włączany, ale do innego pliku .c (co jest całkowicie niepoprawne).

    Przeczytaj dokładnie to co napisałem, bo dokładnie o tym właśnie mówiłem. Plik nagłówkowy z funkcją zadeklarowaną jako statyczna jest dołączony do DWÓCH plików źródłowych. Stąd w jednym z nich jest warning, bo faktycznie w nim tej funkcji nie ma.
  • #8 17856383
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #9 17856453
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    khoam napisał:
    Przeczytaj jeszcze raz dokładnie to, co napisałem - w swoim teście z postu #6 nie włączam wielokrotnie pliku nagłówkowego do różnych plików źródłowych. Gdybym tak zrobił tzn. włączył plik .h do więcej niż jednego pliku plik .c, a tylko w jednym z nich byłaby definicja funkcji statycznej, otrzymałbym następujące ostrzeżenie, przy założeniu, że funkcja ta nie jest nigdzie wywoływana (o czym pisałem już w poście #2):

    Ależ ona _JEST_ gdzieś zdefiniowana - przecież autor tematu wkleił ją z jednego z plików, no nie? Nagłówek z tą (błędną) deklaracją _JEST_ dołączany do wielu plików. Chcesz się przekomarzać to proszę bardzo - ja po prostu sprawdziłem wcześniej, wiec wiem o czym piszę, a Ty jak chcesz to hipotetyzuj dalej.
  • #10 17856463
    Konto nie istnieje
    Poziom 1  
  • #12 17856777
    Konto nie istnieje
    Poziom 1  
  • #13 17858424
    Konto nie istnieje
    Poziom 1  
  • #14 17859483
    andrzej381
    Poziom 2  
    Posty: 2
    W pierwszym poście napisałem że jest to "gotowiec" z youtube który próbuję uruchomić w moich warunkach. Faktycznie w spakowanym projekcie usunąłem deklaracje static z deklaracji i definicji funkcji oraz zamieniłem NULL na 0 (zero- bo to chyba jest równoważne w tym przypadku). Potem przeniosłem projekt z SW4STM32 na AtolicTrueSTUDIO bo w tym pierwszym się nadal nie kompiluje. W TrueSTUDIO wygląda że tak. Na razie nie wiem jakie będą tego efekty bo dopiero poznaję to środowisko (pierwsza instalacja). Błędów w tym projekcie było więcej co widać po za komentowanych przeze mnie liniach kodu jak i w dodanych komentarzach.

Podsumowanie tematu

✨ Użytkownik ma problemy z kompilacją projektu opartego na STM32 Nucleo-F401RE i wyświetlaczu LCD ILI9341, korzystając z SW4STM32. Wskazano błędy związane z porównywaniem wskaźnika z typem całkowitym oraz z deklaracją funkcji jako statycznej w pliku nagłówkowym. Użytkownik poprawił kod, usuwając słowo kluczowe "static" oraz zmieniając porównanie NULL na 0. Po przeniesieniu projektu do AtolicTrueSTUDIO, kompilacja przebiegła pomyślnie, mimo że w projekcie występowały inne błędy.
Wygenerowane przez model językowy.
REKLAMA