Co to jest mikroprocesor dobrego startera do nauki montażu?


19

Chcę więc najpierw nauczyć się assemblera na MP, a następnie przejść do C (ponieważ wygląda na to, że większość z nich korzysta).

Chcę wejść do programowania wbudowanego, naprawdę kocham rzeczy niskiego poziomu C (jądra / moduły dla Linuksa to głównie to, co zrobiłem), ale podoba mi się pomysł, aby móc programować nawet niższy poziom niż to (mikrokontrolery / Mikroprocesory).

Wiem o Arduino i to świetnie, ale nie mogę znaleźć wielu zasobów do korzystania z nich w Zgromadzeniu. AVR firmy Atmel wydają się być bardzo popularne (i tanie), ale jeśli chodzi o rzeczywistą część sprzętową (podłączanie ich na płycie itp.), Nie znajduję zbyt wielu informacji.

Wszelkie sugestie / informacje lub zasoby, o których wiecie, proszę o informację.

Edycja: Kolejna rzecz: wygląda na to, że wszystkie książki o mikroprocesorach, które czytam (zwykle AVR) mówią o samym mikroprocesorze i jego programowaniu. Ale jeszcze nie widziałem książki, która mówi o samodzielnym instalowaniu wszystkich komponentów (mikroprocesor, pamięć, moc itp.). Gdybym mógł znaleźć coś, co by mnie poprowadziło, byłbym w interesach. (Chcę uczyć się od podstaw.) Nie wspominając, że nie mam pojęcia, jak się między nimi porozumiewałeś.


3
Nie chcę cię wysyłać gdzie indziej, ale jeśli jesteś zainteresowany AVR, musisz wiedzieć o AVRfreaks.net .
Kevin Vermeer

Ya Im pochylam się w kierunku AVR ... głównie dlatego, że ich TAK DUŻO informacji na ich temat, i są DUŻO tańsze niż TI-MPS430 ...

2
AVR jest popularny wśród hobbystów, ale nie jestem pewien, skąd masz dane o kosztach. Obie rodziny mają niektóre oferty, które są mniejsze niż 1 USD, a inne pchają 20 USD.
Kevin Vermeer

Cóż ... kiedy patrzyłem na MPS430, wyglądało na to, że oprogramowanie (debuggery itp.) Było trochę drogie po dodaniu do płyt programistycznych.

1
Radzę nie wybierać MSP430, jeśli jesteś początkującym. Oficjalne narzędzia są dobre, ale bezpłatne wsparcie online nie jest zgodne z PIC / AVR
Toby Jaffey

Odpowiedzi:


14

Nauczyłem się na 68HC11 w college'u. Są bardzo proste w obsłudze, ale szczerze mówiąc większość mikrokontrolerów o niskiej mocy będzie podobna (AVR, 8051, PIC, MSP430). Najważniejszą rzeczą, która zwiększy złożoność programowania ASM dla mikrokontrolerów, jest liczba i rodzaj obsługiwanych trybów adresowania pamięci . Na początku należy unikać bardziej skomplikowanych urządzeń, takich jak wyższej klasy procesory ARM.

Prawdopodobnie poleciłbym MSP430 jako dobry punkt wyjścia. Może napisz program w C i naucz się, zastępując różne funkcje asemblerem. Zacznij proste, x + y = z itp.

Po zamianie funkcji lub algorytmu na asemblowanie porównaj i skontrastuj sposób w jaki kodowałeś i co wygenerował kompilator C. Moim zdaniem jest to prawdopodobnie jeden z lepszych sposobów uczenia się asemblera, a jednocześnie dowiedz się, jak działa kompilator, który jest niezwykle cenny jako programista osadzony. Upewnij się tylko, że najpierw wyłączysz optymalizacje w kompilatorze C. W przeciwnym razie wygenerowany kod kompilatora prawdopodobnie będzie bardzo zagmatwany. Stopniowo włącz optymalizacje i zwróć uwagę na to, co robi kompilator.

RISC vs CISC

RISC oznacza „obliczanie zredukowanego zestawu instrukcji”, nie odnosi się do określonego zestawu instrukcji, ale po prostu strategię projektowania, która mówi, że procesor ma minimalny zestaw instrukcji. Niewiele instrukcji, z których każdy robi coś podstawowego. Nie ma ściśle technicznej definicji tego, co trzeba „być RISC”. Z drugiej strony architektury CISC mają wiele instrukcji, ale każda „robi więcej”.

Celowe zalety RISC polegają na tym, że konstrukcja procesora wymaga mniejszej liczby tranzystorów, co oznacza mniejsze zużycie energii (duże w przypadku mikrokontrolerów), tańsze w produkcji i wyższe częstotliwości taktowania, co prowadzi do większej wydajności. Niższe zużycie energii i tańsze wytwarzanie są na ogół prawdziwe, większa wydajność tak naprawdę nie osiągnęła celu w wyniku ulepszeń w architekturze CISC.

Prawie wszystkie rdzenie procesorów są obecnie projektowane w technologii RISC lub „środkowej płaszczyźnie”. Nawet z najbardziej znaną (lub niesławną) architekturą CISC, x86. Nowoczesne procesory x86 są wewnętrznie rdzeniami RISC z dekoderem przykręconym z przodu, który rozkłada instrukcje x86 na wiele instrukcji podobnych do RISC. Myślę, że Intel nazywa te „mikrooperacje”.

Jeśli chodzi o to, które (RISC kontra CISC) jest łatwiejsze do nauczenia się w asemblerze, myślę, że to los. Robienie czegoś z zestawem instrukcji RISC zazwyczaj wymaga więcej linii asemblowania niż robienie tego samego z zestawem instrukcji CISC. Z drugiej strony zestawy instrukcji CISC są trudniejsze do nauczenia ze względu na większą liczbę dostępnych instrukcji.

Większość powodów, dla których CISC dostaje złą nazwę, to fakt, że x86 jest zdecydowanie najczęstszym przykładem i jest trochę bałaganu w pracy. Myślę, że wynika to głównie z tego, że zestaw instrukcji x86 jest bardzo stary i został rozszerzony pół tuzina lub więcej razy przy zachowaniu kompatybilności wstecznej. Nawet twój 4.5Ghz core i7 może działać w trybie 286 (i robi to przy starcie systemu).

Jeśli chodzi o ARM będący architekturą RISC, uważam to za umiarkowanie dyskusyjne. Jest to z pewnością architektura magazynu ładunków. Podstawowy zestaw instrukcji jest podobny do RISC, ale w ostatnich wersjach zestaw instrukcji urósł całkiem do tego stopnia, że ​​osobiście uważam, że jest to raczej środek pośredni między RISC a CISC. Zestaw instrukcji kciuka jest naprawdę najbardziej „RYZYCYJNYM” z zestawu instrukcji ARM.


@Mark - ARM są również procesorami RISC, zestaw instrukcji nie jest taki zły. Jest właściwie ładnie zaprojektowany; istnieją instrukcje dotyczące różnic między przestrzenią użytkownika a różnicami w przestrzeni jądra i innych złożoności, ale można je zignorować podczas rozpoczynania pracy.
Kevin Vermeer

1
@ reemrevnivek Bardziej starałem się odciągnąć go od złożoności radzenia sobie z wieloma trybami procesorów i MMU, kiedy zaczynał w ASM, dlatego wspomniałem o wyższej klasy ARM. Inicjalizacja i konfiguracja wyższej klasy układów SoC ARM jest również znacznie bardziej złożona niż coś w rodzaju AVR / PIC / MSP430.
Mark

RYZYKO? nie jestem pewien, czy rozumiem różnicę między tym a czymkolwiek innym ... chcesz wyjaśnić? Czy większość mikrokontrolerów nie jest RISC? oznacza to po prostu, że mniej zestawów instrukcji jest poprawnych?

1
@sauron Do mojej odpowiedzi dodałem: RISC vs. CISC.
Mark

Czy rzeczy takie jak AVR / PICS to zwykle RISC lub CISC?

8

Myślę, że 8-bitowe mikrokontrolery PIC są najlepszym wyborem ze względu na zmniejszoną liczbę instrukcji.

Efektem ubocznym zmniejszonej liczby instrukcji jest konieczność ponownego wynalezienia koła w porównaniu z innymi mikrokontrolerami z większą liczbą instrukcji.

Ale po zapoznaniu się z PIC możesz migrować do innych mikrokontrolerów i sprawdzać, co jest dla Ciebie lepsze.


Nie do końca się nie zgadzam, ponieważ właśnie to badam, ale rdzenie 8, 16 i 32 bitowe mają zupełnie inne strategie asm.
Grady Player

7

Podobnie jak sugestia Marka 68HC11, zestaw instrukcji z rodziny Freescale 68HCS08 jest uproszczoną wersją Motoroli 6809, która moim zdaniem miała jeden z najczystszych zestawów instrukcji 8-bitowych swoich czasów. Możesz dostać płytę rozwojową z przełącznikami, diodami LED, 3-osiowym akcelerometrem i brzęczykiem piezo za 79 USD tutaj .


Zmniejszona liczba rejestrów, które S08 ma w porównaniu z HC11, może sprawić, że sprawy staną się nieco trudniejsze z przodu, ponieważ musisz dowiedzieć się, jak stos robi wiele z wszystkiego (czego nauczono później w moim laboratorium z HC11 (lub czy to było 12)). W związku z tym AVR są naprawdę fajne, ponieważ masz mnóstwo 32 rejestrów do gry, zanim martwisz się o stos.
Nick T

Właściwie podoba mi się prostota pojedynczego akumulatora, chociaż może to być wąskie gardło. Zamiast używać stosu do zmiennych tymczasowych, na początek uważam, że łatwiej jest użyć 144 bajtów bezpośrednich zmiennych strony, które są dostępne przy krótszych instrukcjach (pozostałe 112 bajtów bezpośredniej strony jest używanych w rejestrach We / Wy). Korzystanie ze stosu (który pozwala na procedury ponownego wysyłania i rekurencyjne) można się nauczyć później.
tcrosley

Czy HC (S) 08 nie pochodzi od HC05?
Johan.A

@ Johan.A Tak, masz absolutną rację. HCS08 to ulepszona wersja HC05. Powinienem o tym wspomnieć. Myślę, że wyprowadzenie jest coś w rodzaju 6800 -> 6801 -> 6805 -> HC (S) 08. Napisałem dużo kodu asemblera dla 6805. Porównałem HCS08 do 6809, aby połączyć się z innymi komentarzami dotyczącymi 68HC11 (która jest mniej więcej wersją 6809 mikrokontrolera).
tcrosley,

4

Zestaw instrukcji msp430 jest dobry do nauki asemblera. Unikaj x86. Uzbrojenie jest kolejnym dobrym, ale ma o wiele więcej instrukcji i opcji i może nie najlepiej nadawać się jako pierwszy zestaw instrukcji. Kciuk jest podzbiorem zestawu instrukcji ramienia i nieźle, na github mam zarówno emulator kciuka (kciuk), jak i emulator msp430 (nie testowany tak bardzo jak kciuk), które są bose, tylko procesor i pamięć i niewiele więcej , abyś miał dobry wgląd w to, co się dzieje. Alternatywą może być qemu, na przykład tam, gdzie widoczność jest widoczna, ale jest znacznie trudniejsza do uzyskania, podobnie jak w przypadku rozwiązania podobnego do qemu, potrzeba dużo więcej pracy, zanim zorientujesz się, czy coś działa.
goto mspgcc4.sf.net, aby zbudować łańcuch narzędzi i / lub zapasowy binutils (./configure --target = msp430 --prefix = / coś) w połączeniu z zapasowym llvm. Gdy będziesz gotowy na sprzęt, płytka rozwojowa msp430 kosztuje mniej niż 5 dolarów. W przypadku narzędzi na ramiona / kciuki po prostu pobierz wersję Lite z CodeCourcery. Płyta cortex-m3 (kciuk / kciuk2) kosztuje teraz około 12 dolców. Unikałbym x86 i avr i innych jako pierwszego zestawu instrukcji, będziesz chciał nauczyć się być dobrze zaokrąglonym. Warto też przyjrzeć się staremu / oryginalnemu zestawowi instrukcji pic. Możesz napisać do niego symulator po południu, a także nauczyć się asemblera. Najpierw niekoniecznie nauczyłem się tego, uczy kilku interesujących rzeczy, ale jednocześnie nie skaluje się i niekoniecznie reprezentuje typowe cechy, które można znaleźć w większości zestawów instrukcji. Msp430 dał mi wrażenie pdp11, który jest pierwszym zestawem instrukcji, którego naprawdę się nauczyłem, oba mają dobrze zaokrąglone, głównie ortogonalne cechy. Zarówno zestawy instrukcji msp430, jak i microchip pic są udokumentowane na wikipedii, przynajmniej jako odniesienie, aby uzyskać cały obraz, pobierz arkusze danych / podręczniki od dostawców, które opiszą każdy rejestr i tryb adresowania, reset / boot itp.


tylko dla asemblera potrzebujesz tylko binutils, przynajmniej dla arm / thumb lub msp430, i możesz zbudować asembler i linker. Jeśli chcesz kompilator C, z którego możesz sprawdzić dane wyjściowe asemblera jako narzędzie edukacyjne, potrzebujesz mspgcc4 lub codeourcery lub po prostu użyj llvm dla obu.
old_timer

4

Czy na pewno chcesz nauczyć się montażu? Czy możesz powiedzieć dlaczego? Jest to dość trudne zadanie, które jest coraz mniej przydatne i przydatne od kilku dni. To jest od osoby, która napisała w nim, a nawet ręcznie złożyła programy (brak asemblera, linkera, tylko karta z zestawem instrukcji).


To nie jest tak naprawdę odpowiedź, ale komentarz. Wahałbym się również, by zaufać wbudowanemu programistowi C, który nie chciał przedzierać się przez fragmenty zestawu od czasu do czasu, próbując zrozumieć dziwność w zachowaniu projektu.
Chris Stratton,

4

Ja też nauczyłem się na 68HC11 w college'u. Raczej sugerują to w stosunku do innych MPU / MCU, chciałem tylko zwrócić uwagę na płytę programistyczną, której używaliśmy, miała program monitorujący. Więc z głupiego terminalu moglibyśmy przejść przez kod i zbadać rejestry ... Sugeruję, gdy wiesz, który procesor spełnia twoje wymagania, sprawdzasz również, jakie płyty rozwojowe są dostępne z programem monitorującym.


Program monitorujący wydaje się bardzo pomocny. Jakiej książki użyłeś, aby się tego nauczyć? jeśli masz coś przeciwko, żebym zapytał ....

Ja również miałem doświadczenie z 68HC11, a „Program monitorowania” jest znany jako Monitor Buffalo . Zasadniczo jest to tylko program przechowywany w pamięci ROM, który komunikuje się szeregowo z komputerem. Wpisujesz w terminalu, a program interpretuje twoje żądania i zwraca informacje. Możesz zrzucić pamięć na ekran, zmienić wartości pamięci, wykonać instrukcje itp. Płyta, której użyliśmy, była . Ten kontroler jest prosty do nauczenia się, ale jest bardzo przestarzały.
sherrellbc

... Książka, której użyliśmy, była taka, jeśli jesteś zainteresowany. Sugerowałbym wybór bardziej nowoczesnego kontrolera, takiego jak AVR; ich planszę rozwoju można znaleźć tutaj .
sherrellbc

3

Uczę zarówno PIC (rdzeń 14-bitowy), jak i ARM. Klasa PIC Mówię, że gdy opanują brzydotę tej architektury, mogą wziąć na siebie wszystko. ARM (nie Thumb / Cortex!) To bardzo ładna architektura do nauki montażu. Używamy płyty LPC2148.


Cześć Wouter, dobrze cię tu widzieć!
Olin Lathrop

2

Nauczyłem się 16-bitowego montażu PIC z dsPIC33F. Zespół procesora jest podobny do C, ponieważ obsługuje wskaźniki i trzy operacje zmienne (na przykład A = B + C), co znacznie ułatwia uczenie się i dostosowywanie do niego.


1

Mylisz tutaj mikrokontrolery i mikroprocesory. AVR to linia mikrokontrolera firmy Atmel, a nie mikroprocesor. Sugeruję, aby najpierw przeszukać wikipedię, aby lepiej zrozumieć różnice między nimi. Zasadniczo mikrokontroler jest mniej lub bardziej kompletnym systemem, podczas gdy mikroprocesor jest tylko jednostką centralną (stąd mikrokontroler ma mikroprocesor w środku).


Tak, wiedziałem o tym, nie wiem, dlaczego tego nie powiedziałem. Miałem na myśli to, że

1
Ponieważ większość mikroprocesorów ma teraz pamięć podręczną / pamięć i niektóre wejścia / wyjścia, jest to bardzo rozmyta linia.
kenny

1
@Sauron - Jesteś pewien, że o tym wiedziałeś? Znowu użyłeś MP; mikrokontroler (który jest poprawnym określeniem AVR i 99% omawianych tutaj urządzeń) prawie zawsze ma wbudowaną pamięć (zarówno nieulotną, jak EEPROM i Flash, jak i niestabilną SRAM). Naucz się korzystać z wbudowanych urządzeń, zanim zaczniesz zapuszczać się w urządzenia peryferyjne.
Kevin Vermeer

1

Na mojej uczelni uczono nas projektowania / architektury sprzętu wraz z językiem asemblera (oczywiście oba te języki idą w parze) z architekturą MIPS (a może DLX ). Od tego czasu zajmowałem się trochę montażem PIC i AVR w szkole / pracy i wszystkie są całkiem podobne. Myślę, że montaż MIPS był świetnym punktem wyjścia, ponieważ język jest bardzo prosty, podobnie jak architektura procesorów.

Zobacz także: ta książka . Nie jest to najlepsza książka na świecie, ale jest to standardowa książka do projektowania komputerów dla wielu uniwersytetów.


Microchip PIC32 wykorzystuje architekturę MIPS i dość łatwo jest łączyć asembler MIPS z C.
tcrosley 16.04.16

0

moją sugestią jest, aby każdy, kto zacznie studiować na temat mikrokontrolerów, a procesory powinien przeczytać książkę zatytułowaną „koduj ukryty język komputera”, jeśli dowiesz się, że prawie jesteś ekspertem w dziedzinie procesorów i do programowania avr lepiej użyć programatora i programu poney prog z atmel studio 6.1 z oficjalnej strony atmel


Proszę nakreślić kluczowe cechy książki i programisty, które skłoniłyby OP do korzystania z nich dokładnie.
Vorac,

chodzi o zrozumienie mikrokontrolera jak to jest rozwijany od systemów cyfrowych i wyjaśnia asemblera
Avinash

przejdź do tej strony j.mp/mpcinterest, aby zdobyć tę książkę
avinash
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.