Często więc widzę książki / samouczki i odniesienia podczas programowania w asemblerze do mikroprocesora ..... potem widzę, że niektórzy nazywają to mikrokontrolerem.
Na przykład Atmel ATtiny2313 .... widziałem kilka samouczków, niektóre nazywają to mikroprocesorem, inne nazywają mikrokontrolerem?
Który to jest? i czy programowanie ich (w zasadzie) jest takie samo? (w montażu)
Odpowiedzi:
To naprawdę dwa pytania w jednym ...
Po pierwsze, jaka jest różnica między mikrokontrolerem a mikroprocesorem?
Mikroprocesor to procesor, który postępuje zgodnie z zestawem instrukcji odczytywanych z zewnętrznej magistrali pamięci. Kontroluje zewnętrzne urządzenia peryferyjne (takie jak ekran, klawiatura, mysz, dysk twardy itp.) Za pośrednictwem zewnętrznej magistrali komunikacyjnej. Gdy programujesz mikroprocesor, twój program znajduje się na zewnątrz urządzenia. W komputerze pamięć ta jest początkowo BIOS-em rozruchowym, który najpierw odczytuje system operacyjny z dysku twardego do pamięci RAM, a następnie kontynuuje wykonywanie go od tego momentu.
Mikrokontroler jest trochę jak zintegrowany procesor + pamięć, z niektórymi zewnętrznymi portami do komunikacji ze światem zewnętrznym. Jest samowystarczalny i nie wykorzystuje pamięci zewnętrznej do przechowywania programu (chociaż w razie potrzeby może odczytywać i zapisywać dane robocze w pamięci zewnętrznej).
Po drugie, czy programowanie mikrokontrolera i mikroprocesora jest tym samym?
Pod pewnymi względami tak, a pod pewnymi względami nie.
Język asemblera to szeroki termin, który opisuje zestaw instrukcji, które procesor może bezpośrednio zrozumieć. Kiedy „kompilujesz” język asemblerowy, tak naprawdę nic nie kompiluje, wszystko to konwertuje go na sekwencję bajtów reprezentujących polecenia i podłącza się do niektórych względnych lokalizacji pamięci. Jest to wspólne zarówno dla mikroprocesorów, jak i mikrokontrolerów.
Jednak różne typy procesorów rozumieją inny zestaw instrukcji procesora. Na przykład, jeśli napiszesz program w asemblerze, który współpracuje z mikrokontrolerem pic 16F877, będzie to kompletny nonsens dla mikroprocesora lub innego mikrokontrolera spoza rodziny mikrokontrolerów pic 16Fxxx.
Tak więc, chociaż montaż działa w podobny sposób we wszystkich mikroprocesorach i mikrokontrolerach, rzeczywista lista instrukcji, które piszesz, jest bardzo różna. Aby pisać w asemblerze, musisz mieć dogłębną znajomość architektury urządzenia, którą normalnie możesz uzyskać z arkusza danych w przypadku mikrokontrolera.
źródło
Różnica polega na tym, że mikrokontroler ma wbudowaną pamięć, taką jak Flash EEPROM i RAM, oraz urządzenia peryferyjne, takie jak równoległe i szeregowe we / wy. W przypadku pierwszych mikroprocesorów były to wszystkie urządzenia zewnętrzne. Zamiast mikroprocesorów we / wy wprowadzono adres i magistralę danych na pinach.
Sposób pisania kodu dla obu jest taki sam.
Aby zilustrować ten punkt: istnieją architektury (na przykład ARM), w których ten sam procesor jest dostępny jako mikrokontroler (z całą pamięcią kodu i danych na chipie), jako mikroprocesor (cała pamięć kodu i danych zewnętrznych) lub jako hybrydowy (niektóre pamięć na chipie, ale do większości aplikacji dodasz pamięć zewnętrzną). Procesor jest taki sam, więc programowanie (w sensie instrukcji procesora) jest takie samo.
źródło
Chociaż jest to zwykle szara strefa, inną powszechną różnicą między mikrokontrolerami i mikroprocesorami jest to, że mikrokontrolery często używają architektury Harvarda (osobna przestrzeń adresowa dla kodu i danych), podczas gdy mikroprocesory prawie wszystkie używają architektury Von Neumann (połączona przestrzeń adresowa dla kodu i danych) .
Przykłady rodzin mikrokontrolerów korzystających z architektury Harvard obejmują: AVR, Intel 8051, PIC (z wyjątkiem PIC32, patrz poniżej) i ARM Cortex-M3. Godnym uwagi wyjątkiem są procesory Freescale, takie jak HCS08, które wykorzystują architekturę Von Neumann, podobnie jak śmigło Parallax.
Wpływa to na programowanie na kilka sposobów (przykłady przedstawione poniżej używają C):
Może istnieć kilka rodzajów pamięci RAM, każda z własną przestrzenią adresową. Na przykład 8051 ma dane zewnętrzne (xdata), które są adresowane oddzielnie od pierwszych 256 bajtów pamięci RAM, mimo że oba są zaimplementowane w tym samym układzie. Dlatego należy używać kwalifikatorów w deklaracjach zmiennych, takich jak
unsigned int xdata foo;
Jeśli stałe są zadeklarowane w pamięci kodu, może być konieczne ich skopiowanie do pamięci RAM przed uzyskaniem dostępu. Lub musi istnieć sposób na uzyskanie dostępu do pamięci kodu, tak jakby to były dane - np. Kwalifikator kodu dla lat 8051 lub funkcja PIC programu Visible Space Visiblity (PSV).
Te niestandardowe sposoby uzyskiwania dostępu do kodu i pamięci RAM wydają się być główną różnicą (oprócz urządzeń peryferyjnych) podczas przenoszenia kodu C z jednej rodziny układów do drugiej.
Nie można wykonać kodu z pamięci RAM w ścisłej architekturze Harvarda, więc nie może istnieć żaden samodmodyfikujący się kod (chyba że liczone jest ponowne flashowanie pamięci programu w locie). Jednak PIC32 ma zmodyfikowaną architekturę Harvarda, która umożliwia wykonywanie kodu w pamięci RAM. Śmigło Parallax faktycznie wykorzystuje swoją zdolność do modyfikowania kodu w celu wykonywania zwrotów podprogramów, ponieważ nie ma stosu sprzętu.
źródło
Mikrokontroler jest zasadniczo rozwiązaniem jednoukładowym, zapewniającym funkcje obliczeniowe i peryferyjne.
Mikroprocesor zapewnia funkcje obliczeniowe, ale nie funkcje peryferyjne.
Funkcje peryferyjne mogą być tak proste, jak posiadanie kilku bitów prostych we / wy; lub mogą obejmować zaawansowane liczniki i timery, wyświetlacz wideo, sieć Ethernet, sterowanie silnikiem, kodek audio i wideo itp.
Dla danej architektury (powiedzmy procesorów i MCU opartych na procesorach x86) kodowanie „obliczeniowe” będzie identyczne. Ale sposób uzyskiwania dostępu do funkcji peryferyjnych będzie się różnił, a więc będziesz musiał wykonać bardzo różne kodowanie specyficzne dla sprzętu, w zależności od tego, jak funkcja peryferyjna jest implementowana na docelowym sprzęcie.
źródło
Mikroprocesory są zwykle stosowane w komputerach, które są zbudowane do uruchamiania programów o dowolnym celu do ustalenia. Takie komputery zazwyczaj zawierają kod dostarczony przez dostawcę, z którym należy oczekiwać interakcji kodu dostarczonego przez użytkownika. Natomiast mikrokontrolery są zwykle używane w maszynach zbudowanych wyłącznie w celu uruchomienia pojedynczego programu. Często ktoś, kto napisze kod dla mikrokontrolera, dostarczy każdą instrukcję, którą wykona maszyna.
Niektóre mikrokontrolery używają tych samych zestawów instrukcji, co popularne mikroprocesory. Zestaw instrukcji 68000 używany w oryginalnych komputerach stacjonarnych Macintosh, Amiga i Atari ST komputerów osobistych został również wykorzystany w niektórych mikrokontrolerach. Mimo że zestaw instrukcji używany przez komputer Macintosh i płytę sterującą opartą na 68HC340 jest taki sam, programowanie na dwóch platformach może być bardzo różne. Na komputerze Macintosh, zanim program dostarczony przez użytkownika zacznie działać, znaczna część systemu będzie już „skonfigurowana”. Kod, który chce bloku pamięci, może załadować rejestry z potrzebną ilością i wykonać instrukcję „pułapki A”. Macintosh OS zwróci wówczas wskaźnik do pamięci, która nie została wcześniej przydzielona w innym celu, i zaznaczy ten obszar pamięci, aby wygrał ” zostanie przydzielony ponownie, dopóki nie zostanie poinstruowany, że pierwotny odbiorca już go nie potrzebuje. Natomiast na płycie z 68HC340 i 128K pamięci RAM nie ma potrzeby ani możliwości „proszenia” o pamięć RAM. Kiedy program się uruchomi, „pobierze” 128 KB i może używać, jak chce; nic innego go nie wykorzysta, ale z drugiej strony program użytkownika musi śledzić, z jakich obszarów korzysta do jakich celów, ponieważ nic innego nie będzie tego śledzić.
Podczas gdy w tym przypadku rzeczywiście rozróżnia się mikrokomputer kontra mikrokontroler, a pytanie dotyczy mikroprocesorów, większość dyskusji na temat programowania mikroprocesorów omawia je w kontekście komputera ogólnego przeznaczenia.
źródło
Mikroprocesor: cyfrowy moduł sprzętowy, który wykonuje instrukcje. Moduł może być kompletnym układem scalonym.
Mikrokontroler: kompletny moduł zawierający mikroprocesor z pamięcią wewnętrzną oprócz innych modułów.
źródło