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ś.
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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 .
źródło
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.
źródło
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).
źródło
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.
źródło
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.
źródło
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.
źródło
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).
źródło
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.
źródło
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
źródło