Więc eksperymentowałem trochę z STM32F407 (jestem nowy w ARM) i postanowiłem napisać prostą aplikację przy użyciu bibliotek HAL, ponieważ wygląda na to, że ST przerwał Standardowe biblioteki urządzeń peryferyjnych. Więc moje pytanie brzmi: o co chodzi w HAL? Czy StdPeriph nie spełnia swojej roli? Dlaczego mieliby to przerwać dla HAL? Dla mnie wygląda na to, że HAL to kompletny bałagan.
Dokumentacja jest okropna, przynajmniej dla StdPeriph istnieje kompletna dokumentacja zorganizowana wystarczająco dobrze, aby łatwo znaleźć to, czego chcesz ( http://stm32.kosyak.info/doc/ ). Dla HAL istnieje kiepski plik PDF ( http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf ), który ma pozornie losową strukturę. Czytając dowolną sekcję, na przykład dotyczącą urządzeń peryferyjnych, wydaje mi się, że nie rozumiem wymagań, aby ją odpowiednio skonfigurować i dostosować. Wygląda bardziej na osobiste notatki od kogoś, kto nie chce zapomnieć o czymś, niż na odniesienie.
Wiem, że mogę używać CubeMX do inicjowania GPIO i konfigurowania urządzeń peryferyjnych, ale moim celem jest zrobienie tego sam, więc lepiej rozumiem ich działanie, a nie oprogramowanie, które to wszystko dla mnie zrobi. czy robię coś źle? Czy to początkujący ARM we mnie mnie myli? Czy dostępna dokumentacja jest TAKA zła?
Odpowiedzi:
Tworzenie własnych bibliotek jest dość proste. Dokumentacja specyfikacji rejestru jest całkiem dobra, większość, jeśli nie wszystkie urządzenia peryferyjne są łatwe do skonfigurowania. Korzystanie z bibliotek jest dla mnie o wiele bardziej bolesne. ale może to tylko ja. Odnosi się to do st, nxp, ti, atmel, aby wymienić tylko kilka (nie tyle w przypadku danych wywiadowczych i mikroczipa).
Dlaczego zmieniają biblioteki, może być z wielu powodów, jakiś nowy szef przejął, jakiś oddział został zamknięty, a inny przejęty. Marketing chciał nowego wizerunku produktu. Jak wspomniano ElectronS, może to być próba większego oderwania się od sprzętu, aby przyciągnąć użytkowników, którzy nie chcą lub nie są w stanie zrobić goły metal. Chciałbym pójść dalej i powiedzieć, że prawdopodobnie próbują konkurować ze zjawiskiem Arduino. Które mbed i wszyscy inni zawsze próbowali zrobić i zawiedli (nawet przed Arduino).
W każdym razie im dalej od sprzętu, tym bardziej staje się on wzdęty i wolniejszy, więc tym więcej trzeba wydać na jednostkę dla ROM, RAM i MHZ. Tylko żebyś mógł spędzić tyle samo czasu na programowaniu? Robisz to inaczej?
Mówisz, że pochodzisz ze świata PIC, teraz wykonali dobrą pracę z narzędziami, ich dokumentacja chipowa była jednak okropna, niektóre z najgorszych. skompensowali biblioteki i piaskownice.
Pod koniec dnia wypróbuj różne opcje, wypróbuj konkurencyjne produkty, aby zobaczyć porównanie ich narzędzi. Wiele z tego możesz zrobić za darmo, aby zobaczyć, czy to ma sens, i możesz kompilować rzeczy. Może nawet użyj symulatora zestawu instrukcji. Znajdź ten, który pasuje do Ciebie.
Uwaga: opcja bez bibliotek w puszkach jest ZAWSZE dostępna. Nie jesteś ograniczony co do tego, jakiego zestawu narzędzi możesz użyć, jaki system operacyjny hosta, jaki ide, edytor itp. Mogą przylgnąć do ciebie przy programowaniu części, jeśli ich opcje są bardzo ograniczone pod tym względem, przejdź na inny układ lub sprzedawca, jeśli możesz.
Aby sprzedać taki produkt chipowy, muszą zapewnić środowisko programistyczne, niezależnie od tego, czy jest to ich całe, czy też darmowe produkty, które skleili ze sobą. I zwykle łączą jakąś bibliotekę. Musi tylko wyglądać wystarczająco dobrze, a mrugnięcie ledowego przykładu działa wystarczająco dobrze, aby skłonić kierownictwo lub zespół sprzętowy do zaprojektowania ich produktu, a następnie, gdy produkt planszy zostanie wrzucony do ściany przez oprogramowanie, nastąpi ból nie przybywa lub nie. Jeśli to prawie działa, ale nie całkiem, jest to duża wygrana dla sprzedawcy chipów, ponieważ teraz zapłacisz za wsparcie techniczne w tym ostatnim kawałku. Dlatego w ich najlepszym interesie jest, aby być prawie na miejscu, ale nie całkiem.
Dostawcy układów muszą tylko wyglądać wystarczająco dobrze, aby wygrać projekt. Muszą ciągle ulepszać (? Zmieniać) produkt, aby przyciągnąć nowych i starych klientów. Będą mieli do czynienia z nadpisywaniem, jak daleko się różnią i ile wcześniejszych bibliotek nadal obsługuje, są różne. Tak więc prawie każda biblioteka, do której się przyzwyczaisz, w końcu zniknie. Naucz się więc dostosowywać (lub nie używaj ich i używaj własnych, które możesz w nieskończoność wspierać). To prawda, że najlepiej jest opracować aplikację tylko raz dla każdego produktu, dostosować oprogramowanie układowe do perfekcji (powodzenia w przypadku korzystania z bibliotek stron trzecich) i nie trzeba wracać i znaleźć komputera, który załaduje ich zestaw narzędzi, jeśli można znaleźć skopiuj go i pamiętaj, jak korzystać ze starej biblioteki. Pamiętaj, że nie tylko powinieneś zapisać swój kod źródłowy, ale powinieneś także zapisać wszystkie ich narzędzia i dokumenty.
Ich biblioteki są obsługiwane tylko na jednym łańcuchu narzędzi, w ramach jednego, może dwóch IDE, a czasem tylko w systemie Windows i niektórych wersjach. Ponownie nie masz żadnych z tych ograniczeń, z pewnością nie dla ARM, jeśli robisz swoje. Zawsze możesz przeczytać dowolną / wszystkie ich biblioteki, aby zobaczyć, jak to robią. Ale to często jest bardzo przerażające, nie używają programistów zespołu A do bibliotek, wyodrębniłem kilka wierszy kodu, aby zapytać kandydatów na rozmowę kwalifikacyjną, co jest nie tak z tym kodem.
aby zaoszczędzić czas i wysiłek zarówno po stronie krzemowej, jak i programowej, bardzo często przetwarzają ten sam adres IP, więc kiedy zobaczysz, jak urządzenie peryferyjne działa na jednym z ich układów, często działa tak samo na wielu innych układach. Tak, systemy zegarowe mogą być trudne z bibliotekami lub bez nich. Duża szansa na zepsucie chipa, czyli tam, gdzie wydarzyła się większość moich układów. Pomaga zrozumieć, jak działają ich układy, na przykład AVR, większość, jeśli nie wszystkie, można przeprogramować, gdy układ jest resetowany, więc każdy zły kod, który zakłóca styki potrzebne do przeprogramowania lub zawiesza logikę potrzebną do przeprogramowania, nie ważne, możesz przeprogramować te żetony. Niektórzy z tych dostawców (st jest jednym) mają wewnętrzny moduł ładujący, który można wybrać za pomocą paska (BOOT0 na przykład w świecie st),
Jeden rozmiar pasuje do wszystkich, nie pasuje do nikogo. Szczególnie dotyczy oprogramowania. Tak więc każda próba wyodrębnienia sprzętu powoduje, że jest on powolny i wzdęty. Równie dobrze możesz zdobyć większy układ i uruchomić na nim Linuksa, jeśli naprawdę tego chcesz. Wiele z tego wynika jednak z faktu, że programiści nie chcą ubrudzić sobie rąk, więc w zasadzie poprosiliśmy o to i starają się to dostarczyć.
Ponownie, nie zamykaj się w st ani w żadnym innym dostawcy (chyba że jest za późno, a zarząd i / lub zespół sprzętowy przylgnął do ciebie, zauważ, że produkty stm32 są ładne i łatwe w użyciu). Robić zakupy. TI wkłada dużo jajek do kosza m4. Możesz wykonać mbed na wielu produktach arm, a także na rozwiązaniach obsługiwanych przez dostawcę.
Jedną z rzeczy, na których zawsze możesz polegać, jest to, że od czasu do czasu zmieniają biblioteki i ostatecznie przestają wspierać tę, do której się przyzwyczaiłeś.
źródło
Powiem wam, że wielu z nas podziela to samo rozczarowanie bibliotekami HAL, są one rzeczywiście słabo i niejasno udokumentowane, a wciąż nowe zawierają wiele błędów.
Odpowiedź na pytanie, dlaczego ST zdecydowała się na HAL, jest prosta:
Chcą stworzyć warstwę abstrakcji sprzętu, co w prostym języku angielskim oznacza, że chcą, aby tworzenie oprogramowania i kod były niezależne od mikrokontrolera, więc jeśli napiszesz dzisiaj kod dla stm32f4 i po kilku latach będziesz musiał przeprowadzić migrację do stm32f7 będzie łatwe, a kod będzie wysoce modułowy.
Pozwala to również większej liczbie programistów, takich jak programista, na pracę z mikrokontrolerem bez faktycznego zrozumienia lub zagłębienia się w szczegółowe informacje na temat tego, jak sprzęt wykonuje zadanie. Firmy takie jak ST i TI (zaczynając tę drogę teraz) starają się uczynić osadzone programowanie podobnym do programowania kodu PC, w którym używa się sterowników wysokiego poziomu do opracowania kodu SZYBKO. Niezdarność i brak optymalizacji w sterownikach i bibliotekach rekompensuje wysoka wydajność urządzeń ARM.
Myślę, że STM32cubeMX jest doskonałym narzędziem, jeśli używasz bibliotek HAL, ponieważ najbardziej czasochłonnym zadaniem jest inicjowanie urządzeń peryferyjnych, a teraz możesz to zrobić w bardzo krótkim czasie, z interfejsem wizualnym, który można łatwo zmienić bez wpływu na kod użytkownika (jeśli piszesz kod w odpowiednim miejscu) Możesz użyć Stm32cubeMx, a następnie przejrzeć kod i spróbować zrozumieć, w jaki sposób i dlaczego korzystają z każdej funkcji, w ten sposób próbujesz rozwiązać ćwiczenie i mieć w pobliżu instrukcję rozwiązania do korekty, która jest świetne IMO.
Rdzeń ARM jest cichym złożonym, więc stare metody, które zastosowaliśmy na 8-bitowym mikrokontrolerze, takie jak bezpośrednia obsługa rejestrów (pisanie C w trybie asemblera) są niemożliwe, czasochłonne i utrudniają utrzymanie kodu ze względu na złożoną architekturę (sprawdź na przykład ustawienie zegara)
źródło
Wiem, że to potrwa długo i jest opiniowane, ale ponieważ właśnie (z powodzeniem) wypuściliśmy nasz nowy produkt za pomocą HAL, myślę, że warto to rozważyć. Ponadto, nie pracuję dla ST, nienawidziłem każdego HAL, prawie wznowiłem projekt ze StdPeriph, czułem ból - ale teraz rozumiem dlaczego.
Najpierw trochę tła. Projektujemy systemy telemetryczne o ultra niskiej mocy, a nasz produkt jest zasilany przez STM32L1. Kiedy zaczęliśmy pracować nad oprogramowaniem, mieliśmy zwykłe wybory dla urządzeń ST (goły metal): rób wszystko ręcznie, korzystaj z bibliotek StdPeriph lub korzystaj z HAL. Chłopaki z ST przekonali nas, abyśmy poszli z HAL - więc zrobiliśmy to. To było bolesne, musieliśmy omijać błędy w oprogramowaniu (część I2C doprowadziła nas do szaleństwa przez dłuższy czas) i nadal nie lubię ogólnej architektury. Ale to działa.
Kiedy przeszedłem z komputera stacjonarnego na wbudowany, nieco ponad rok temu, byłem oszołomiony czymś dziwnym, czego nie mogłem nazwać ani nawet pojąć. Z czasem mogłem zrozumieć, co się dzieje - a raczej co się dzieje - świat osadzony przechodzi transformację. Krzem staje się tańszy każdego dnia, a MCU są bardziej wydajne i wszechstronne. Coraz więcej urządzeń, niezależnie od ich wielkości, zapotrzebowania na energię, polega na ogólnych MCU. Coraz więcej firm dołącza do gry, wprowadzając hordę nowych programistów z różnych środowisk. Kultura „wredna” odchodzi od tradycyjnego „faceta z umiejętnościami programistycznymi” do „faceta z nieprecyzyjną wiedzą sprzętową”.
To, czy jest to dobre czy złe, nie ma znaczenia. To się po prostu zdarza. W rzeczywistości zdarzyło się to także w świecie oprogramowania więcej niż jeden raz. Boom internetowy w 2000 roku przyciągnął początkujących PHP / MySQL - powiedz im, że w CPU są rejestry, odpowiedzą: „Używam Linuksa, więc w moim systemie operacyjnym nie ma rejestru”. Wcześniej systemy operacyjne dla wielu użytkowników działające w trybie chronionym pozwoliły leniwym programistom nigdy nie konfigurować ISR w całej swojej karierze i mieć się dobrze . Jeszcze wcześniej klawiatury i urządzenia do dziurkowania kart i producenci dręczą.
I tak, tworzą mnie obecne trendy osobisty smutek, ponieważ widzę nieświadomych programistów zachwyconych najnowszymi błyszczącymi technologiami, a jednocześnie nie jestem w stanie połączyć ich z historią. Kiedy widzę młodszego mnie kodującego grę w JavaScript z WebGL w 2015 roku, chcę wykrzyczeć: „Nie ma nic nowego! Zrobiłem to samo z C ++ i 3Dfx SDK w 1995 roku!”. Historia nie mówi, że jego gra działa na moim telefonie komórkowym, podczas gdy mój potrzebował komputera dla graczy (i instalatora, a ja nie mogłem przesyłać aktualizacji przez Internet). Prawda jest taka, że mógł rozwinąć grę w ciągu jednego miesiąca, gdzie ja zrobiłem to samo w ciągu sześciu lub dwunastu lat.
Oczywiście ani ST, ani TI, ani Intel, ani ktokolwiek produkuje układy, nie chce przegapić tury. I mają rację. HAL jest odpowiedzią ST i jest naprawdę niezły, nie tylko po stronie biznesowej lub marketingowej, ale także po stronie inżynieryjnej. Powodem, dla którego jest to dźwięk, jest nazwa:
Jeśli cokolwiek innego, o tym powinieneś pamiętać. HAL to próba odejścia od sprzętu. To dobra inżynieria, ponieważ pozwala nam oddzielić funkcjonalność od szczegółów. Tworzenie warstw jest tym, co pozwala tworzyć złożone programy - jedna abstrakcja jedna na drugiej, aż po sprzęt. Abstrakcja jest w rzeczywistości najpotężniejszym narzędziem do zarządzania złożonością . Bardzo wątpię, aby ktokolwiek na tej planecie mógł zaprogramować przeglądarkę internetową dla konkretnego procesora.
Zmiana kulturowa jest rzeczywiście trudna do strawienia, ale ponieważ muszę przyznać, że nie trzeba czytać sztuki programowania komputerowego Knutha, aby tworzyć aplikacje internetowe, świat EE musi przyznać, że są nowi przybysze, którzy mogą (i będą!) Opracowywać osadzony kod bez przeczytania instrukcji
FuckingHoly Reference.Dobra wiadomość jest taka, że nowi gracze nie oznaczają mniej pracy dla starszych graczy - wręcz przeciwnie, IMHO. Do kogo zadzwonią, gdy coś „nie zadziała?”. Jeśli masz RTFM (w przeciwieństwie do nich) i wiesz, co robią poszczególne bity tego niejasnego rejestru konfiguracji, masz przewagę.
Pomiędzy odczytami i eksperymentami wystarczy przejść z HAL. Nowy MCU? Nie ma problemu. Nowa linia MCU? Nie ma też problemu (kodowałem test na STM32F4 Nucleo w ciągu zaledwie jednego dnia z CubeMX, a następnie po prostu przeniosłem go na nasze urządzenie ... po prostu czułem się dobrze ). Szydzisz z testów jednostkowych? Nie ma problemu. Lista jest długa, bo abstrakcja jest dobra.
Oczywiście sam HAL nie jest w 100% OK. Dokumentacja jest okropna (ale masz RT
FHRM, prawda?), Są błędy, ST właśnie rzucił na nas wersję beta (wydaje się dość standardowa w dzisiejszych czasach), a ich publiczne poparcie to żart. Ale brak wydania HAL byłby jeszcze gorszy.źródło