Aby dowiedzieć się, jak to działa, nie chcesz używać żadnego z powyższych. Pobierz kompilator z ramieniem krzyżowym i dokumentację od st, gotowe. Zacznij kodować. te układy są na ogół bardzo łatwe do zaprogramowania. dokumentacja mówi ci, jakie bity w jakich rejestrach robią co.
Każda / wszystkie z tych bibliotek mają na celu usunięcie tego zrozumienia / obciążenia / pracy i sprawienie, że poczujesz się jak zwykłe wywołanie aplikacji podobnej do interfejsu API. Tego właśnie chce wielu ludzi. Możesz użyć wszystkich źródeł dla tych bibliotek, aby pomóc zrozumieć, ale gdy stajesz się lepszy, możesz znaleźć dziury i problemy w bibliotekach, czasami bardzo przerażający kod. kod zrzucony razem, napisany ogólnie i z grubsza przeniesiony z jednego układu do drugiego, być może funkcje wspierające, których nie ma twój układ itp. I wszystkie mają nadmierny narzut. 10 do 100 razy za dużo kodu do zadania, na pewno wiele z nich może się zoptymalizować, ale dlaczego w ogóle tam jest?
Niezależnie od tego, czy korzystasz z własnej biblioteki, czy korzystasz z jednej z tych bibliotek, powinieneś nadal szukać źródła bibliotek, których używasz, aby sprawdzić, czy czujesz się dobrze z tym, co robią, jeśli ma to sens, pasuje do dokumentacji chipa itp. Kiedy coś idzie źle, prawdopodobnie musisz przekopać się przez ich rzeczy tak samo jak twoje, aby dowiedzieć się, dlaczego.
Pamiętaj, że dokumentacja chipowa też nie jest idealna, to część zabawy.
Nie rozumiem, dlaczego montaż pojawia się w dyskusji na temat programowania bez systemu metalowego. Możesz sobie poradzić przy bardzo małym montażu. W przypadku tych układów cortex-m technicznie potrzebujesz tylko tyle asm, aby zostać uruchomionym:
.globl _start
_start:
.word 0x20001000
.word main
Nie możesz polegać na danych ani bss i nie możesz powrócić z głównego z minimalną ilością asm. Ale to wszystko, czego POTRZEBUJESZ za najsłabszy metal. Teraz, jeśli chcesz robić przerwania, potrzebujesz więcej wpisów w tabeli wektorów. więcej linii .word. Polecam więcej asm, ale może 10 lub 20 linii więcej.
zwykle jest to cały asm, którego używam.
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20001000
.word reset
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang: b .
.align
.thumb_func
.globl PUT16
PUT16:
strh r1,[r0]
bx lr
.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr
.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
.thumb_func
.globl GET16
GET16:
ldrh r0,[r0]
bx lr
.thumb_func
.globl dummy
dummy:
bx lr
.end
Tak, mówi cortex-m0, ale to jest faktyczny bootstrap dla mojego kodu m4. Wolę, żeby to był kciuk, a nie kciuk2. I po prostu ponownie używam tego kodu z jednej kory-m na drugą, zmieniając odpowiednio adres wskaźnika stosu, aby działał dla m0, m3 i m4. Nie mam jeszcze m7 ani nie badałem go zbyt wiele.
Włączenie procesora może wymagać kilku dodatkowych linii asm, ponieważ potrzebne są szczegółowe instrukcje. Ale nie chodzi o to, by programować na niskim poziomie i asm. C ma wszystko, czego potrzebujesz, aby skonfigurować układ, a także napisać aplikację. Biblioteki, o których mówisz, są napisane w C nie asm, więc oczywiście nie muszą używać asm.
Jeśli chcesz nauczyć się wewnętrznych mechanizmów, napisz własny kod. Nie używaj tych bibliotek innych niż jako odniesienie. Czasami łatwiej jest po prostu zhakować go, niż spróbować przeczytać jego kod. (nie tylko ST, ale wszyscy dostawcy. Jeden z dostawców miał wiersz kodu, więc niepokojące jest to, że używam go jako pytania do rozmowy kwalifikacyjnej, nie zamierzam go tutaj zamieszczać).
ST zdecydowanie, ale także inni dostawcy, aby oszczędzać energię, mają włączanie zegara dla części układu, więc zanim wejdziesz i spróbujesz mrugnąć diodę, musisz znaleźć bit włączania dla tego bloku gpio i sprawdzić, czy wyjdzie reset resetu włączony, jeśli nie, włącz go, rozmawiając z logiką gpio bez włączonego zegara, po prostu zawiesza procesor, czekając na odpowiedź logiki, która nigdy nie zareaguje. Nie zawsze mówią ci o tych możliwościach. Po włączeniu czasami przeprowadzają cię przez inicjację dla określonego urządzenia peryferyjnego. Dokumenty ST są całkiem dobre. Pochodząc z mikroczipa, który dostaje dość kiepską ocenę dokumentacji, nie powinieneś mieć problemu.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
lub drugimDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
.