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

[STM32] Czy używać bibliotek ST?

pikoc 11 Lis 2009 13:17 30193 152
  • #1 11 Lis 2009 13:17
    pikoc
    Poziom 9  

    Zastanawiam się czy używać bibliotek ST do STM32. Np. coś takiego:

    Code:
    void GPIO_Conf(void)
    
    {
      GPIO_InitTypeDef GPIO_InitStructure;

      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
    }

    GPIO_Init zawiera 52 linijki kodu! A wszystko to aby ustawić wartości, bodajże 3 rejestrów. Wiem, że ręczne ustawienie tych rejestrów nie jest tak proste jak w 8 czy 16bitowych mikrokontrolerach, ale czy jest sens używać tych programożernych funkcji? Czy może one się ładnie kompilują i optymalizują?

    Dopiero zaczynam z STM32 i nie chcę się uzależnić od czegoś co nie będzie dobre w późniejszych projektach. Używanie tych bibliotek jest w sumie dosyć przyjemne a dokumentacja do nich po chwili używania staje się jednak przyjemna :)

    0 29
  • CControls
  • #2 11 Lis 2009 13:31
    94075
    Użytkownik usunął konto  
  • Pomocny post
    #3 11 Lis 2009 14:07
    Freddie Chopin
    Specjalista - Mikrokontrolery

    IMHO - nie warto, bo są beznadziejne. W bardziej skomplikowanych kwestiach to jest parada wyrażeń typu if () { ... } else if () {...} else if () {...} ... . Warto pooglądać kod tej biblioteki, bo z optymalnością to on zbyt dużo nie ma wspólnego... Co kto woli...

    Do skonfigurowania i/o można napisać sobie baaaaaardzo proste makra, które zajmują o wiele mniej kodu, a są równie wygodne i nie trzeba poznawać ich dokumentacji. Ja obecnie mam do tego albo makra konfigurujące wartość rejestru CR:

    Code:

    #define m_GPIO_MODE_bit(pin)            (((pin) * 4) & 0x1C)
    #define m_GPIO_CNF_bit(pin)               (m_GPIO_MODE_bit(pin) + 2)

    #define m_GPIO_MODE(pin,mode)            ((mode) << m_GPIO_MODE_bit(pin))
    #define m_GPIO_CNF(pin,cnf)               ((cnf) << m_GPIO_CNF_bit(pin))
    #define m_GPIO_MODE_CNF(pin,mode,cnf)      (m_GPIO_MODE(pin, mode) | m_GPIO_CNF(pin, cnf))
    ...

    GPIOx->CRy = m_GPIO_MODE_CNF(X_pin, GPIO_CRx_MODE_OUT_10M_value, GPIO_CRx_CNF_OUT_PP_value);

    (tyle że tutaj martwisz się sam o poprzednią wartość)

    albo funkcję która z nich częściowo korzysta:

    Code:

    /*------------------------------------------------------------------------*//**
    * \brief Configures pin.
    * \details Configures one pin in one port.
    *
    * \param [in,out] port_ptr points to the configuration structure of desired port
    * \param [in] pin selects one pin, allowed values = [0,15]
    * \param [in] mode_cnf_value is a value of MODE and CNF which will be set for
    * selected pin, use m_GPIO_MODE_CNF_value(mode, cnf) macro for that
    *//*-------------------------------------------------------------------------*/

    void io_pin_cfg(GPIO_TypeDef *port_ptr, int pin, int mode_cnf_value)
    {
       volatile uint32_t *cr_ptr;
       uint32_t cr_value;

       if (pin < 8)
       {
          cr_ptr = &port_ptr->CRL;         // configuration of pins [0,7] is in CRL
       }
       else
       {
          cr_ptr = &port_ptr->CRH;         // configuration of pins [8,15] is in CRH
          pin -= 8;                     // crop the pin number
       }

       cr_value = *cr_ptr;                  // localize the CRL / CRH value

       cr_value &= ~(GPIO_CRx_MODE_CNF_mask << (pin * 4));   // clear the MODE and CNF fields (now that pin is an analog input)
       cr_value |= (mode_cnf_value << (pin * 4));   // save new MODE and CNF value for desired pin

       *cr_ptr = cr_value;                  // save localized value to CRL / CRL
    }

    io_pin_cfg(GPIOx, X_pin, m_GPIO_MODE_CNF_value(GPIO_CRx_MODE_OUT_10M_value, GPIO_CRx_CNF_OUT_PP_value));


    Funkcja zajmuje na -Os 40 bajtów kodu thumb2 = 15 rozkazów

    Mam też obiektową funkcję, która zajmuje się nawet zaktywowaniem odpowiednich zegarków w RCC, ale nie nadaje się jeszcze do pokazania.

    4\/3!!

    3
  • #4 11 Lis 2009 14:30
    Krauser
    Poziom 26  

    Biblioteka pozwala na korzystanie z napisanych funkcji lub tylko na korzystanie ze zdefiniowanych rejestrów. Na pewno kod przygotowany z wykorzystaniem przygotowanych struktur jest bardziej czytelny i szybszy w analizie przez innych którzy też ich używają. Sam z nich korzystam, ale i tak są przypadki że coś trzeba zmienić. Przykładem jest chociażby taktowanie procesora. Dostępne funkcje są napisane pod kwarc 8MHz, a np. taki Primer2 ma 12MHz.

    0
  • CControls
  • #5 11 Lis 2009 17:34
    Krzysiu19
    Poziom 10  

    Korzystałem z tych bibliotek i muszę przyznać, że przyjemnie sie ich używa. Osobną kwestią jest jej wydajność ale Panowie przecież mamy do czynienia z procesorem 32-bitowym z instrukcjami Thumb2. Czy to będzie kilka kb kodu wiecej czy mniej nie jest czasem tak ważne jak czytelnosc kodu oraz jego modułowość. Naprawdę wiecej zależy teraz od linkera i kompilatora użytego. Jeśli duzo osob używa tej biblioteki to bardzo szybko mozna wspolnie diagnozowac problemy, a tak jak wszyscy bedą mieli osobne funkcje to robi sie misz masz. Pod inne procesory 8- i 16- bitowe sam musiałem wszystko pisać. Teraz wolę się skupić na zgrabnym wykorzystaniu tych bibliotek do potrzeb aplikacji. Do tej pory nie spotkałem problemu polegającego na tym że jakas funkcja biblioteczna nie działa albo działa tak wolno, że blokowała dalsze wykonywanie programu.

    Podsumowując jest to kwestia gustu ale ja wolę nie wyważać otwartych drzwii.

    0
  • #6 11 Lis 2009 22:13
    Freddie Chopin
    Specjalista - Mikrokontrolery

    To że procesor jest 32-bitowy nie znaczy wcale, że należy go zarżnąć głupio napisanymi bibliotekami. Czytelność kodu z tą biblioteką jak dla mnie jest taka sama jak dobrze napisanego kodu bez niej. A modułowości to on na pewno nie daje, bo nie jest w ani jednym miejscu "generic", a więc kodu napisanego z tą biblioteką nie przeniesiesz już łatwo na inną platformę. Ale pewnie o to chodzi firmie ST.

    No ale co kto woli.

    4\/3!!

    0
  • #7 11 Lis 2009 22:24
    arrevalk
    Poziom 25  

    Lepszym rozwiązaniem, niż wykorzystywanie jakichkolwiek bibliotek firmowych. Jest napisanie własnych które zapewnią "portowalność" kodu na różne architektury (np wprowadzenie warstwy niskiego poziomu zajmującej się gadaniem z peryferiami). Jest to rozwiązanie dobre w przypadku kiedy trzeba napisać taki sam kod na różne procesory, bo przepisuje się wtedy jedynie funkcje niskiego poziomu. Z resztą bezpieczne z tego względu że za parę lat może jakaś architektura czy procesor zniknąć z rynku i co w tedy? Jak ktoś się nie postarał to trzeba cały kod przepisać.

    A biblioteki firmowe wykorzystywać jako wsparcie/lekturę/sugestie.

    0
  • #8 11 Lis 2009 22:32
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Jako lekturę owszem (można popatrzeć w jakiej kolejności trzeba niektóre rzeczy robić, bo datasheety ST są niezbyt cudowne), ale jako sugestię? Chyba jedynie sugestię "jak nie pisać dobrego kodu" <:

    4\/3!!

    0
  • #9 11 Lis 2009 22:39
    arrevalk
    Poziom 25  

    Freddie Chopin napisał:
    [...] ale jako sugestię? Chyba jedynie sugestię "jak nie pisać dobrego kodu" <:

    To też jest sugestia ;)
    A wracając do tematu. Często w bibliotekach przykładowych jest wiele niepotrzebnego kodu. Albo (tak było w przypadku AT91lib) strasznie dużo kodu który na łącze szeregowe wysyła teksty w stylu "jestem w fukncji_X" czego nawet nie dało się wyłączyć poprzez zmianę opcji TRACE_LEVEL. Nie wspominając o tym że funkcje formatujące ten komunikat kompilowały się zawsze.

    0
  • #10 12 Lis 2009 14:54
    pikoc
    Poziom 9  

    Dziękuję wszystkim za zainteresowanie.
    Dopiero zaczynam, nie mam pojecia jeszcze o asemblerze a wiec trudno mi jest sprawdzic samemu co wychodzi po kompilacji. Widzę, że moje podejrzenia są właściwe. Wiec będę się starał pisać programy używając swoich makr, funkcji itp. Te biblioteki kojarzą mi sie teraz z Bascomem, łatwe, przejrzyste i niekoniecznie optymalne. :)
    Sięgam po szybszy mikrokontroler po to aby był wydajniejszy a nie z mody lub "wygodniejszego" używania

    0
  • #11 18 Wrz 2010 13:38
    phantom_king
    Poziom 10  

    Freddie Chopin napisał:


    Code:

    void io_pin_cfg(GPIO_TypeDef *port_ptr, int pin, int mode_cnf_value)
    {
       volatile uint32_t *cr_ptr;
       uint32_t cr_value;

       if (pin < 8)
       {
          cr_ptr = &port_ptr->CRL;         // configuration of pins [0,7] is in CRL
       }
       else
       {
          cr_ptr = &port_ptr->CRH;         // configuration of pins [8,15] is in CRH
          pin -= 8;                     // crop the pin number
       }

       cr_value = *cr_ptr;                  // localize the CRL / CRH value

       cr_value &= ~(GPIO_CRx_MODE_CNF_mask << (pin * 4));   // clear the MODE and CNF fields (now that pin is an analog input)
       cr_value |= (mode_cnf_value << (pin * 4));   // save new MODE and CNF value for desired pin

       *cr_ptr = cr_value;                  // save localized value to CRL / CRL
    }

    io_pin_cfg(GPIOx, X_pin, m_GPIO_MODE_CNF_value(GPIO_CRx_MODE_OUT_10M_value, GPIO_CRx_CNF_OUT_PP_value));



    Nie lepiej to zastąpić makrem?

    Code:

    #define m_GPIO_CR(_GPIOx,_pin)         (bitband_t ((_pin<8)? (&(_GPIOx->CRL)):(&(_GPIOx->CRH))))
    #define m_GPIO_CR_MODE_CNF(_GPIOx,_pin,_mode,_cnf) (m_GPIO_CR(_GPIOx,_pin) = m_GPIO_MODE_CNF(_pin,_mode,_cnf))


    to zajmuje 0 dodatkowych bajtów i wykorzystuje twoje wcześniejsze makra.[/code]

    0
  • #12 18 Wrz 2010 16:23
    VanThor
    Poziom 19  

    phantom_king napisał:
    Code:

    #define m_GPIO_CR(_GPIOx,_pin)         (bitband_t ((_pin<8)? (&(_GPIOx->CRL)):(&(_GPIOx->CRH))))
    #define m_GPIO_CR_MODE_CNF(_GPIOx,_pin,_mode,_cnf) (m_GPIO_CR(_GPIOx,_pin) = m_GPIO_MODE_CNF(_pin,_mode,_cnf))


    to zajmuje 0 dodatkowych bajtów i wykorzystuje twoje wcześniejsze makra.[/code]


    I ma czytelność na poziomie 0%. A jak łatwo i szybko się szuka w tym błędu potem...

    0
  • #13 18 Wrz 2010 23:54
    Freddie Chopin
    Specjalista - Mikrokontrolery

    phantom_king napisał:
    to zajmuje 0 dodatkowych bajtów i wykorzystuje twoje wcześniejsze makra.

    Załóżmy, że ustawisz w ten sposób 20 różnych pinów - jak sądzisz, która wersja zajmie mniej kodu - z funkcją czy z makrami?

    4\/3!!

    0
  • #14 20 Wrz 2010 08:37
    adamusx
    Poziom 27  

    Jeśli nie programujesz amatorsko, tylko masz jakieś konkretne zadanie do zrealizowania w zespole w firmie to nie bawisz się zazwyczaj w tworzenie własnych bibliotek bo po prostu nie ma na to czasu! Na STM32 z wykorzystaniem FWlib powstało w firmie w której pracuje już wiele projektów. Dodam, że nie są to proste układy, ale projekty zawierające kilkadziesiąt plików i jak dotąd nie napotkaliśmy większych problemów przy ich używaniu. Jeśli potrafi się z czegoś korzystać to dlaczego tego nie używać...

    0
  • #15 21 Wrz 2010 13:45
    flapo213
    Poziom 21  

    Witam,

    podzielę się również swoimi spostrzeżeniami odnośnie bibliotek firmowych.

    Myślę że warto by było w tym miejscu udzielić wyjaśnienia czym różnia się funkcje od makr preprocesora.

    Jeśli użyje się składni i wywoła w kodzie makro to oznacza iż to co kryje się pod makrem zostanie wprost wklejone w miejsce makra przez kompilator co faktycznie zajmuje więcej miejsca w kodzie ale jest szybsze w wywołaniu niż funkcja.

    Trzeba rozważyć co się lepiej opłaca czy funkcja czy makro. Jeśli wywoałnie ma być jednokrotne to makro jeśli wielokrotne to funkcja.

    Co do biblioteki firmowej to jest tak, że co jakiś czas wychodzi aktualizacja tych bibliotek i bywało tak w przeszłości, że niektóre funkcje znikały bądź ich wywołanie zmieniało się znacząco co skutkowało tym, że po podmianie trzeba było również modyfikować ich użycia.

    Jeden z poprzedników słusznie zauważył, że jeśli zależy nam na szybkości tworzenia kodu bez wnikania jak skonfigurować jakieś peryferium to funkcje mają duże uzasadnienie. W przypadku korzystania z różnorodnej gammy różnych mikrokontrolerów te biblioteki są nieocenioną pomocą.

    Przyznam szczerze że konfigurowanie tego mikrokontrolera czytając manuala jest chwilami wielką sztuką.

    Porównajcie sobie np. Atmela z ST.

    W atmelu np. przy konfiguracji jakiegoś peryferium istniej zapis 'Product dependencies'. W manualu STM32 jest też informacja jak to zrobić ale trzeba ją dobrze czytać nie jest tak wyraźiście.


    Pozdrawiam

    0
  • #16 21 Wrz 2010 14:32
    94075
    Użytkownik usunął konto  
  • #17 21 Wrz 2010 20:14
    marcelix007
    Poziom 14  

    Fakt czytanie manuli faktycznie jest wielką sztuką. Przydały by się jakieś lepsze manuale ala od atmeg, albo książka w której autor nie używa bibliotek. Freddie Chopin - nie myślałeś nad napisaniem książki do STM32?

    0
  • #18 22 Wrz 2010 08:28
    Freddie Chopin
    Specjalista - Mikrokontrolery

    marcelix007 napisał:
    Freddie Chopin - nie myślałeś nad napisaniem książki do STM32?

    A kto by to czytał, no i kto by to wydał? (;

    4\/3!!

    0
  • #19 22 Wrz 2010 08:48
    Bruum
    Poziom 23  

    Cytat:

    A kto by to czytał


    Jo bych to czytał. Przyjmujesz przedpłaty?

    1
  • #21 08 Lis 2010 01:23
    rpal
    Poziom 27  

    Freddie Chopin napisał:
    marcelix007 napisał:
    Freddie Chopin - nie myślałeś nad napisaniem książki do STM32?

    A kto by to czytał, no i kto by to wydał? (;

    4\/3!!

    Jeśli kolega wyzbylby się wrodzonej uszczypliwości, czytelnicy z pewnością się znajdą. Wydawcy nie potrzeba bo istnieje coś takiego jak plik pdf i wazne jest aby zabezpieczyć swój dobrze pojety interes. Poza tym rzecz bezcennna, chwała , splendor i sława :)
    Kol. Jagged nie przytaczaj moze więcej czegoś co można nazwac pijawkami przynajmniej jesli chodzi o Helion.

    0
  • #22 08 Lis 2010 07:05
    Jagged
    Poziom 10  

    Czy mógłbyś rozwinąć myśl? Pytam z ciekawości, jaką prowizję dostaje autor?
    Z drugiej strony wydawca ponosi koszty i cały proces jest ryzykowne, więc na udanych książkach odbija sobie te mniej udane inwestycje... Być może zapewniają też większy rynek zbytu, który może rekompensować marże autora. Ale to tylko moje domysły.

    Mogą być też e-booki, ale mimo, że w tej księgarni są książki informatyczne, to na stronie dla autorów nie wydają się być nimi szczególnie zainteresowani:
    http://www.zlotemysli.pl/autorzy.html

    0
  • #23 08 Lis 2010 13:17
    gaskoin
    Poziom 38  

    rpal napisał:
    Freddie Chopin napisał:
    marcelix007 napisał:
    Freddie Chopin - nie myślałeś nad napisaniem książki do STM32?

    A kto by to czytał, no i kto by to wydał? (;

    4\/3!!

    Jeśli kolega wyzbylby się wrodzonej uszczypliwości, czytelnicy z pewnością się znajdą. Wydawcy nie potrzeba bo istnieje coś takiego jak plik pdf i wazne jest aby zabezpieczyć swój dobrze pojety interes. Poza tym rzecz bezcennna, chwała , splendor i sława :)
    Kol. Jagged nie przytaczaj moze więcej czegoś co można nazwac pijawkami przynajmniej jesli chodzi o Helion.



    Tak, pdfa zabezpieczysz, ale co z tego jak sprzedasz jednego a potem się on rozprzestrzeni po całym świecie ? :D

    0
  • #24 08 Lis 2010 15:09
    Jagged
    Poziom 10  

    Pdfy elektroniki praktycznej chyba nawet nie są zabezpieczone, a nie ma dla wydawcy jakiejś tragedii z rozprzestrzenianiem się.

    0
  • #25 08 Lis 2010 16:12
    Bruum
    Poziom 23  

    Może tak zabezpieczyć jak autor free rtos-a manuale? Na każdej stronie imię i nazwisko klienta jako znak wodny i hasło do każdego otwarcia.

    0
  • #26 08 Lis 2010 20:18
    Pituś Bajtuś
    Poziom 28  

    Jagged napisał:
    Mogą być też e-booki, ale mimo, że w tej księgarni są książki informatyczne, to na stronie dla autorów nie wydają się być nimi szczególnie zainteresowani:
    http://www.zlotemysli.pl/autorzy.html

    Że co? Złote myśli? :D:D:D "Wydawnictwo" dla różnej maści szarlatanów, mesjaszy i proroków od książek typu "jak zostać bogatym w dwa dni nic nie robiąc", czy "odkryj swoje trzecie oko" i książki ściśle naukowe? Weź nawet nie żartuj.

    Jagged napisał:
    Pytam z ciekawości, jaką prowizję dostaje autor?

    Poniżającą.

    Myślenie o książkach w kategoriach zarobkowych w Polsce jest szaleństwem, chyba że nazywasz się J.K. Rowling, napiszesz paszwkila o rzekomej współpracy kogoś tam z służbą jakąś tam, albo wspomnienia kapciowego wysokiego urzędnika obcego malutkiego państwa. Zbierajac złom więcej zarobisz niż pisaniem książek ściśle wąskotematycznych które przeznaczone są do jeszcze węższego grona odbiorców na dodatek napisanej w języku używanym wyłącznie w małym państewku gdzie wg hamburgerojadów niedźwiedzie polarne hasają po polach i połoninach. Jak doliczymy jeszcze do tego VAT na ksiażki od nowego roku to już nikt książki papierowej nie kupi.

    Jedyna sensowna opcja w tym temacie to język angielski i samowydanie albo e-book o zasięgu ogólnoświatowym.

    0
  • #27 09 Lis 2010 16:23
    rpal
    Poziom 27  

    obawiam sie ze bajduś ma rację.. ale co szkodzi w tym podręczniku połaczyć aspekty programowania STM-ów z ew. tresciami rozrywkowymi choćby jakąś erotyką albo sensacją. moze to brzmi jak żart ale kilka lat temu nikt sobie nie wyobrazał windows bo zył w sferze dos-a albo unixa a jak sie okazało mozna było połaczyć wiele sprzecznych z pozoru cech:) to tylko kwestia podjeścia autora.

    0
  • #28 09 Lis 2010 16:53
    gaskoin
    Poziom 38  

    masz jakieś pomysły takich połączeń ? Bo mi przychodzą różne głupie pomysły do głowy, ale nie sądzę, żeby nadawało się to do publikacji :P

    0
  • #29 09 Lis 2010 17:31
    kekon
    Poziom 17  

    Ja również nie jestem zwolennikiem uzywania tych bibliotek. Zwykle więcej informacji znajduję w pdfach gdzie podane jest za co odpowiadają konkretne rejestry i bity niż szukanie opisu funkcji, które mają być niby bardziej czytelnie od "niskopoziomowego" ustawiania peryferiów. Do tego te biblioteki nie zawsze działają prawidłowo.

    Cytat:
    Freddie Chopin - nie myślałeś nad napisaniem książki do STM32?


    A kto by to czytał, no i kto by to wydał? (;


    W Polsce znalazłaby się z pewnością grupa osób, która chętnie by poczytała zwłaszcza dla której sporą barierą jest jęz. angielski. Z tego co widzę na forach to jest wiele takich osób. Większość materiałów technicznych w necie jest po angielsku i tego nie da się zmienić. Trzeba po prostu uczyś się anglika i już.

    Cytat:
    Myślenie o książkach w kategoriach zarobkowych w Polsce jest szaleństwem, chyba że nazywasz się J.K. Rowling, napiszesz paszwkila o rzekomej współpracy kogoś tam z służbą jakąś tam, albo wspomnienia kapciowego wysokiego urzędnika obcego malutkiego państwa. Zbierajac złom więcej zarobisz niż pisaniem książek ściśle wąskotematycznych które przeznaczone są do jeszcze węższego grona odbiorców na dodatek napisanej w języku używanym wyłącznie w małym państewku gdzie wg hamburgerojadów niedźwiedzie polarne hasają po polach i połoninach. Jak doliczymy jeszcze do tego VAT na ksiażki od nowego roku to już nikt książki papierowej nie kupi.


    Sam bym lepiej tego mnie ujął :)

    0
  • #30 29 Wrz 2011 01:51
    jaca16
    Poziom 2  

    Czy w ciągu roku zaszły jakieś zmiany. Czy warto używać biblioteki st, a może istnieje już jakaś inna biblioteka, lepsza(godna polecenia). Dodam że zaczynam naukę z stm32 mam pare miesięcy na zrobienie projektu(praca dyplomowa) i chciałbym to zrobić jak najszybciej ale nie za wszelką cenę, nie chcę nabrać złych nawyków.

    0