Programowanie różnic między mikrokontrolerem a mikroprocesorem?


9

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)



1
@Kellenjb: Byłoby, gdyby nie pytał o różnice programistyczne. Myślę, że jest na tyle inny, że nie można go zamknąć.
BG100

1
@ BG100 zaakceptowana odpowiedź naprawdę wyjaśniła różnicę, a nie różnicę programistyczną.
Kortuk

Odpowiedzi:


14

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.


Cóż, miałem na myśli, że tak, ASM będzie inny dla każdego ..... ale czy polecenia / etc są ogólnie takie same (lub wykonane w ten sam sposób) między MC a MP ... Mam na myśli, że MC ma MP więc przypuszczam, że tak .. (minus pamięć)

@Sauron: Nie, nie bardzo… chociaż niektóre polecenia mogą być podobne między urządzeniami, takie jak add, mov, sub itp., Prawdopodobnie są one zaimplementowane inaczej i nie będą się przenosić między urządzeniami.
BG100

1
Znakomita odpowiedź, która prawdopodobnie mogłaby mi pomóc, kiedy zaczynałem klasę mikroprocesorów.
pfyon

cóż, miałem na myśli ...... Jak na przykład, ponieważ mikrokontroler ma w sobie procesor ... Instrukcje montażu są bardziej ukierunkowane na rzeczywisty procesor niż na otaczające go komponenty.

@Sauron: Tak, zgadza się.
BG100

10

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.


Och ok, to ma sens, ale ASM dla każdego jest w zasadzie taki sam?

Masz na myśli, jeśli nauczę się kodować dla serii Cortex M, to mogę też kodować dla serii Cortex A?
0xakhil

Zasadniczo tak na oba pytania, instrukcje asm są takie same (chociaż mogą występować niewielkie odmiany, podobnie jak różne wersje ARM mogą dodawać szczegółowe instrukcje). Ale ilekroć używasz rzeczy poza procesorem (pamięć podręczna, kontroler przerwań, urządzenia peryferyjne itp.), Będą duże różnice.
Wouter van Ooijen

8

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 jakunsigned 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.


1

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.


1

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.


0

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.


Witamy w EE.SE, Mike. Użyj <enter> x 2 do podziału akapitu. Naprawiłem to dla ciebie.
Tranzystor
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.