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 + uVision4 - Kompilacja biblioteki do karty SD i FAT32

EBC41 12 Lut 2013 21:01 3147 10
REKLAMA
  • #1 11926109
    EBC41
    Poziom 28  
    Posty: 1573
    Pomógł: 98
    Ocena: 124
    Witam wszystkich,
    Cały dzień toczę ostre boje z bibliotekami do systemu plików i puki co stoję na straconej pozycji :/ Na pierwszy ogień poszła Chan's FAT z funkcjami stworzonymi dla STM32F107VB (czyli dokładnie taki jaki ja mam). Problem polega na tym, że korzysta ona z Standard Peripheral Library :/. Wydzieliłem z całego katalogu z przykładowym projektem samą bibliotekę i mój projekt wygląda tak jak na screenie poniżej

    STM32 + uVision4 - Kompilacja biblioteki do karty SD i FAT32

    Przy próbie jego kompilacji w takiej formie dostaję ciąg błędów o nieznanych funkcjach i zmiennych (co jest zresztą widoczne i na screenie). Gdy próbowałem dodać tą bibliotekę przez dodanie wpisu
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    w pliku sd_spi_stm32.c dostaję inny ciąg błędów który informuję mnie o ponownej redeklaracji typów.
    STM32 + uVision4 - Kompilacja biblioteki do karty SD i FAT32
    Jak się domyślam problem leży gdzieś w zapętlających się dołączeniach plików. Pytanie jak tego uniknąć i jak zmusić mój projekt do działania?



    Ewentualnie czy ktoś posiada tą: http://ultra-embedded.com/?fat_filelib bibliotekę przystosowaną do pracy z STM32 przez SPI?
  • REKLAMA
  • #2 11926306
    rajszym
    Poziom 21  
    Posty: 272
    Pomógł: 48
    Ocena: 18
    Czy do pracy z SPL nie jest przypadkiem potrzebna definicja: USE_STDPERIPH_DRIVER ?
  • REKLAMA
  • #3 11926665
    EBC41
    Poziom 28  
    Posty: 1573
    Pomógł: 98
    Ocena: 124
    Niby tak, ale jak odkomentuję tą definicję w pliku stm32f10x.h to cały projekt zwraca mi ogromną ilość błędów
    STM32 + uVision4 - Kompilacja biblioteki do karty SD i FAT32
  • #4 11926777
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    A dodałeś katalogi źródłowe biblioteki do projektu?
    W ustawieniach projektu powinno wyglądać to tak:

    STM32 + uVision4 - Kompilacja biblioteki do karty SD i FAT32

    jeżeli tak nie jest, to używając okienka dialogowego Include paths dodaj wszystkie ścieżki katalogów plików źródłowych używanych w projekcie.
  • #5 11927379
    rajszym
    Poziom 21  
    Posty: 272
    Pomógł: 48
    Ocena: 18
    Jeśli włączasz stm32f10x.h, to nie włączaj już stm32f10x_lib.h.
  • REKLAMA
  • #6 11930788
    EBC41
    Poziom 28  
    Posty: 1573
    Pomógł: 98
    Ocena: 124
    Walczę dalej. Aktualnie udało mi się zmodyfikować projekt w sposób generujący najmniej błędów przy kompilacji. Całą bibliotekę przerzuciłem to innego folderu w drzewie projektu i wprowadziłem zalecane przez was zmiany tylko dla niego. Mój główny program korzysta jedynie z plików nagłówkowych z rejestrami ( #include <stm32f10x.h> ) i wydaje mi się, że to było jednym z problemów.. Aczkolwiek dalej nie udało mi się skompilować tego projektu. Bez ingerencji w pliki biblioteki dalej miałem dużo błędów o redefinicji już zdefiniowanych typów i zmiennych. Zmodyfikowałem dwa pliki w następujący sposób

    sd_spi_stm32.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    integer.h
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Aktualnie próba kompilacji kończy się tym co na poniższych screenach. MA ktoś jeszcze jakieś pomysły?
    STM32 + uVision4 - Kompilacja biblioteki do karty SD i FAT32 STM32 + uVision4 - Kompilacja biblioteki do karty SD i FAT32 STM32 + uVision4 - Kompilacja biblioteki do karty SD i FAT32
  • #7 11931024
    imarszi
    Poziom 14  
    Posty: 150
    Pomógł: 6
    Ocena: 6
    Nie za bardzo znam uVision4 ale jeżeli masz
    #include "stm32f10x_lib.h
    to znaczy że korzystasz ze skompilowanej biblioteki SPL dostarczonej wraz ze środowiskiem i nie powinieneś już dodawać jej źródeł do projektu. A jak masz źródła w strukturze projektu to zrób
    #include "stm32f10x.h"

    P.S.
    uVision4 nie zna inline ? może przejdź na Eclipse + gcc + OpenOCD ?

    P.S. 2
    uVision4 ma __inline
  • #8 11932595
    rajszym
    Poziom 21  
    Posty: 272
    Pomógł: 48
    Ocena: 18
    Wykonywanie jekichkolwiek zmian w pliku integer.h dostarczanego wraz z biblioteką fatfs - to raczej średnio dobry pomysł, zwłaszcza, że są tam tylko definicje niezależne od platformy. Jedyne co trzeba zmienić / napisać to kilka funkcji w diskio.c (lub jak w twoim przypadku sd_spi_stm32.c.
    Poniżej zawartość pliku diskio.c z innego projektu, ale nie wiem czy to działa!
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Może Ci się przyda.
  • #9 11943903
    EBC41
    Poziom 28  
    Posty: 1573
    Pomógł: 98
    Ocena: 124
    Ok. Sprawa nieco posunęła mi się do przodu.... Na początek powróciłem do starych dołączeń plików, czyli #include "stm32f10x.h". Potem okazało się, że pomimo dodania we właściwościach projektu ścieżek z plikami do dołączenia, kompilator dalej brał starą wersję biblioteki ze swojego katalogu instalcji (konkretnie przez stm32f10x_conf.h pojawiał się stm32f10x_type.h którego nie ma w nowej wersji a który powodował błędy ponownej deklaracji tego samego). Musiałem podać w jednym z plików pełną ścieżkę do nowej wersji pliku stm32f10x_conf.h która była już w katalogu z projektem. Po korekcie tego inline aktualnie mam "tylko" takie błędy jak na screenie

    STM32 + uVision4 - Kompilacja biblioteki do karty SD i FAT32
  • REKLAMA
  • #10 11944614
    imarszi
    Poziom 14  
    Posty: 150
    Pomógł: 6
    Ocena: 6
    Brakuje ci funkcji assert_param jej prototyp znajduję się w pliku stm32f10x_conf.h .
    Jak masz #define USE_FULL_ASSERT 1 to jeszcze musisz napisać sobie funkcję void assert_failed(uint8_t* file, uint32_t line);
  • #11 11952122
    EBC41
    Poziom 28  
    Posty: 1573
    Pomógł: 98
    Ocena: 124
    No i panowie chyba się udało. Przerobiłem bibliotekę w taki sposób, że kompiluje się bez żadnych błędów. Po dodaniu pliku nagłówkowego ff.h i użyciu jakiejś przykładowej funkcji też niby jest OK. Teraz muszę sprawdzić to na jakiejś karcie SD

Podsumowanie tematu

✨ Użytkownik zmagał się z problemami przy kompilacji biblioteki FAT32 dla karty SD na mikrokontrolerze STM32F107VB, korzystając z uVision4. Problemy dotyczyły błędów związanych z nieznanymi funkcjami i zmiennymi, a także z ponowną redeklaracją typów. Użytkownicy sugerowali, aby upewnić się, że odpowiednie katalogi źródłowe są dodane do projektu oraz aby nie używać jednocześnie plików nagłówkowych stm32f10x.h i stm32f10x_lib.h. Po kilku modyfikacjach i dodaniu odpowiednich plików nagłówkowych, użytkownik ostatecznie zdołał skompilować projekt bez błędów i planował przetestować go na karcie SD.
REKLAMA