Skocz do zawartości

ARM Cortex M-3 a biblioteka STL


Pomocna odpowiedź

Napisano

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

 

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.

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
(edytowany)
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
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

  • 2 tygodnie później...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...