Skocz do zawartości

ARM Cortex M-3 a biblioteka STL


FlyingDutch

Pomocna odpowiedź

Witam wszystkich,

chciałem się zapytać, czy programując mikro-kontrolery STM32 (np. STM32F103xx) korzystacie z biblioteki STL (i czy warto)?

Takie pytanie bo brakuje mi np. generycznego typu vector z wszystkimi dla niego metodami - głównie chodzi mi o sort (potrzebuje obliczyć medianę dla bufora DMA z 1024 pomiarami z ACD).

Na razie zrobiłem sortowanie za pomocą "bubble sort" i to mi wystarcza, ale zastanawiam się tak ogólnie, czy jest sens korzystania z STL dla programów dla sprzętu embedded z ARM Cortex M-3?

Z chęcią poznałbym wasze zdanie (boję się narzutów pamięciowych związanych z korzystaniem z STL).

Pozdrtawiam

 

Link do komentarza
Share on other sites

Osobiście nie programuję z bibliotekami SPL z kilku podstawowych powodów:

- biblioteki te nie są już wspierane przez producenta układów,

- narzut jest bardzo duży na zasoby, 

- istnieje bardzo dobry dokument opisujący programowanie na rejestrach tzw.: "poradnik Szczywronka", który jest dużym ułatwieniem w pisaniu oprogramowania "bezpośrednio na rejestrach" łącznie ze zrozumieniem działania mikrokontrolerów STM32. Zatem korzystanie z bardziej rozbudowanych, słabo udokumentowanych i zawierających błędy bibliotek mija się po prostu z celem.

Więcej krytyki można znaleźć np w tym artykule:

Standard Peripheral Library krytycznym okiem

 

Uważam również, że jednak warto się z nimi zapoznać, z następujących powodów:

- bardzo dużo materiałów i książek jest na nich opartych,

- niektóre składniki tych bibliotek wydają się dość uporządkowane, w końcu celem ich było odłączenie warstwy abstrakcyjnej od sprzętowej i wg mnie autorom się to udało,

- brakuje scentralizowanej dokumentacji do tych bibliotek, są przykłady książki itp, ale to wszystko jest takie rozproszone, mi bardzo mocno utrudnia zgłębianie wiedzy.

Bardzo często jak czegoś nie umiem sam napisać, to potrzebna jest translacja przykładów z STL do "rejestrów". Chodzi oczywiście o zrozumienie działania, a nie o przekopiowanie.

Pisałeś o sortowaniu i medianie...

Sortowania chyba nie znajdziesz w żadnej ze standardowych bibliotek od ST, ale może trzeba głębiej poszukać. Dodatkowo jeśli programista potrafi sensownie oddzielić warstwę abstrakcyjną od sprzętowej to funkcje wyższego poziomu, jak sortowanie, bez problemu zaimplementuje z innych środowisk - to główna zaleta pisania w językach takich jak "C". Oczywiście najbardziej rozwijające jest pisanie takich bibliotek samemu, ale czasami po prostu szkoda na to czasu :)

Za to pojęcia typu mediana, średnia itp wg mnie mają odzwierciedlenie w bibliotece CMSIS.

CMSIS to świetne narzędzie bardzo dobrze udokumentowane, zorientowane na sprzętową obsługę, a zatem czerpiące garściami z najlepszych cech architektury STM32, a szczególnie z takich linii jak STM32F4 czy też F3. Sam bez wcześniejszego przygotowania potrafiłem korzystać z tych bibliotek. Jeśli ktoś myśli o STM32 i DSP (a ciężko o tym nie myśleć : ) to jest to "must have".

Więcej można znaleźć tutaj:

http://www2.keil.com/mdk5/cmsis/

Ogólnie jeśli miałbym poradzić coś początkującemu to na pewno nie "sztywne pchanie" się w SPL. Należy zacząć od poradnika, o którym pisałem wyżej, można poznać HAL'a, liznąć SPL, na pewno warto korzystać z CubeMX. Jako środowisko to Atollic True Studio.

Link do komentarza
Share on other sites

Pytanie było o STL, a nie SPL - drobna ale istotna różnica :) Moim zdaniem lepiej uważać z C++ oraz bibliotekami w przypadku "małych" mikrokontrolerów. Główny problem to mała ilość pamięci RAM. O ile pamiętam std::vector domyślnie używa dynamicznej alokacji pamięci - ja nie mogę z takich "wodotrysków" korzystać, ale nawet gdyby nie było to zabronione w firmie, radziłbym uważać. Fragmentacja pamięci nie jest problemem w przyadku komputerów stacjonarnych, mikroprocesory z MMU też zobie poradzą - natomiast w małym mikrokontrolerze może być problem.

Z drugiej strony Arduino jest przykładem, że niewielki podzbiór możliwości C++ można spokojnie stosować nawet na małych AVR. Ale jeśli jedyną motywacją dla użycia STL jest algorytm sortowania to może lepiej użyć qsort() ze standardowej biblioteki C?

  • Pomogłeś! 1
Link do komentarza
Share on other sites

4 minuty temu, Elvis napisał:

Pytanie było o STL, a nie SPL - drobna ale istotna różnica 🙂

 

Ooops, pozostaje przeprosić za ignorancję 🙂

A z innej beczki, napisałem mocno nie na temat, co radzicie? Usunąć ten wpis czy jak? 🙂

Edytowano przez Zealota
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

11 minut temu, Elvis napisał:

Moim zdaniem lepiej uważać z C++ oraz bibliotekami w przypadku "małych" mikrokontrolerów. Główny problem to mała ilość pamięci RAM. O ile pamiętam std::vector domyślnie używa dynamicznej alokacji pamięci - ja nie mogę z takich "wodotrysków" korzystać, ale nawet gdyby nie było to zabronione w firmie, radziłbym uważać. Fragmentacja pamięci nie jest problemem w przyadku komputerów stacjonarnych, mikroprocesory z MMU też zobie poradzą - natomiast w małym mikrokontrolerze może być problem.

Cześć,

też maiłem obawy, że narzuty są za duże. Po prostu napiszę sobie tych kilka funkcji, które mi są potrzebne - nie stanowi to dużego problemu (raczej przyzwyczajenia z "wiekszych sprzętów"). Dziękuję wam obu za odpowiedź.

Pozdrawiam

31 minut temu, Zealota napisał:

A z innej beczki, napisałem mocno nie na temat, co radzicie? Usunąć ten wpis czy jak? 🙂

Cześć,

nie przejmuj się: rzeczywiście STL można było łatwo pomylić z SPL (Standard Peripheral Library) w kontekście programowania STM32. Link, który podałeś jest całkiem ciekawy - więc niech już zostanie.

Pozdrawiam

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.