Programmare le differenze tra un microcontrollore e un microprocessore?


9

Quindi vedo spesso libri / tutorial e riferimenti quando programmo in assembly su un microprocessore ..... poi vedo alcuni che si riferiscono ad esso come un microcontrollore.

Ad esempio l'Atmel ATtiny2313 .... ho visto alcuni tutorial, alcuni lo chiamano un microprocessore, altri lo chiamano un microcontrollore?

Cos'è questo? e programmarli (sostanzialmente) è lo stesso? (in assemblea)



1
@Kellenjb: Lo sarebbe se non chiedesse delle differenze di programmazione. Penso che sia abbastanza diverso da non chiudere.
BG100

1
@ BG100 la risposta accettata ha solo spiegato la differenza, non una differenza di programmazione.
Kortuk,

Risposte:


14

Sono davvero due domande in una ...

Innanzitutto, qual è la differenza tra un microcontrollore e un microprocessore?

Il microprocessore è una CPU puramente che segue una serie di istruzioni lette da un bus di memoria esterno. Controlla periferiche esterne (come schermo, tastiera, mouse, disco rigido, ecc.) Tramite un bus di comunicazione esterno. Quando si programma un microprocessore, il programma è esterno al dispositivo. In un computer, questa memoria è inizialmente la ROM del BIOS di avvio che inizialmente legge il sistema operativo dal disco rigido nella memoria RAM, quindi continua a eseguirlo da lì.

Il microcontrollore è un po 'come una CPU + memoria all-in-one, con alcune porte esterne per comunicare con il mondo esterno. È autonomo e non usa la memoria esterna per contenere il suo programma (anche se se necessario può leggere e scrivere dati di lavoro nella memoria esterna).

In secondo luogo, programmare un microcontrollore e un microprocessore è lo stesso?

In qualche modo sì, e in qualche modo no.

Il linguaggio assembly è un termine generico che descrive un insieme di istruzioni che la CPU può comprendere direttamente. Quando "compili" il linguaggio assembly, in realtà non compila nulla, ma lo converte in una sequenza di byte che rappresentano i comandi e i plug in alcune posizioni di memoria relative. Questo è comune sia ai microprocessori che ai microcontrollori.

Tuttavia, diversi tipi di CPU comprendono un diverso set di istruzioni CPU. Ad esempio, se si scrive un programma in linguaggio assembly che funziona con un microcontrollore pic 16F877, sarà completamente assurdo per un microprocessore o qualsiasi altro microcontrollore al di fuori della famiglia di microcontrollori pic 16Fxxx.

Pertanto, sebbene l'assemblaggio funzioni in modo simile su tutti i microprocessori e i microcontrollori, l'elenco effettivo delle istruzioni scritte è molto diverso. Per scrivere in un linguaggio assembly, è necessario avere una conoscenza approfondita dell'architettura del dispositivo, che normalmente è possibile ottenere dal foglio dati nel caso di un microcontrollore.


Bene, ciò che intendevo era sì, l'ASM sarà diverso per ognuno ..... ma i comandi / etc sono generalmente gli stessi (o fatti allo stesso modo) tra un MC e un MP ... Voglio dire, un MC ha un MP quindi presumo così .. (meno la memoria)

@Sauron: No, non proprio .. mentre alcuni comandi possono essere simili tra dispositivi, come add, mov, sub, ecc., Sono probabilmente implementati in modo diverso e non effettueranno il port tra dispositivi.
BG100

1
Ottima risposta, e probabilmente quella che mi avrebbe potuto aiutare quando stavo iniziando la mia classe di microprocessori.
pfyon,

beh, quello che intendevo era ...... Come se un microcontrollore avesse una CPU al suo interno ... le istruzioni di assemblaggio sono più rivolte alla CPU effettiva piuttosto che ai componenti circostanti.

@Sauron: Sì, è corretto.
BG100

10

La differenza è che il microcontrollore include memoria su chip come Flash EEPROM e RAM e periferiche come I / O parallelo e seriale. Con i primi microprocessori erano tutti dispositivi esterni. Invece dei microprocessori dell'I / O avevano un indirizzo e un bus dati portato ai loro pin.
Il modo in cui scrivi il codice per entrambi è lo stesso.

Per illustrare questo punto: ci sono architetture (ARM per esempio) in cui la stessa CPU è disponibile come microcontrollore (con tutta la memoria di codice e dati sul chip), come microprocessore (tutta la memoria di codice e dati esterna) o ibrido (alcuni memoria sul chip, ma per la maggior parte delle applicazioni aggiungerai memoria esterna). La CPU è la stessa, quindi la programmazione (nel senso delle istruzioni della CPU) è la stessa.


Oh ok questo ha più senso, ma l'ASM per ognuno è sostanzialmente lo stesso?

Vuoi dire se imparo a programmare per la serie Cortex M, posso quindi programmare anche per la serie Cortex A ??
0xakhil,

Fondamentalmente sì ad entrambe le domande, le istruzioni asm sono le stesse (anche se potrebbero esserci variazioni minori, proprio come varie versioni ARM possono aggiungere istruzioni specifiche). Ma ogni volta che usi cose al di fuori della CPU (cache, controller di interrupt, periferiche, ecc.) Ci saranno grandi differenze.
Wouter van Ooijen,

8

Anche se questa tende ad essere un'area grigia, un'altra differenza comune tra microcontrollori e microprocessori è che i microcontrollori usano spesso l'architettura di Harvard (spazio di indirizzi separato per codice e dati), mentre i microprocessori quasi tutti usano l' architettura Von Neumann (spazio di indirizzi combinato per codice e dati) .

Esempi di famiglie di microntroller che utilizzano l'architettura Harvard includono: AVR, Intel 8051, PIC (tranne PIC32, vedi sotto) e ARM Cortex-M3. Una notevole eccezione sono i processori Freescale, come l'HCS08, che utilizzano l'architettura Von Neumann, così come l'elica Parallax.

Ciò influisce sulla programmazione in diversi modi (gli esempi mostrati di seguito usano C):

Esistono diversi tipi di RAM, ognuno con il proprio spazio di indirizzi. Ad esempio, l'8051 ha dati esterni (xdata) che vengono indirizzati separatamente dai primi 256 byte di RAM, anche se entrambi sono implementati sullo stesso chip. Quindi bisogna usare i qualificatori su dichiarazioni di variabili comeunsigned int xdata foo;

Se le costanti vengono dichiarate nella memoria del codice, potrebbe essere necessario copiarle nella RAM prima di poter accedere. Oppure, deve esserci un modo per accedere alla memoria del codice come se si trattasse di dati, ad esempio il qualificatore di codice per gli 8051 o la funzione Program Space Visiblity (PSV) di PIC.

Questi modi non standard di accesso al codice e alla RAM tendono ad essere la differenza principale (oltre alle periferiche) quando si esegue il porting del codice C da una famiglia di chip a un'altra.

Non è possibile eseguire il codice dalla RAM in una rigorosa architettura di Harvard, quindi non può esserci alcun codice auto-modificante (a meno che non si contenga al volo la memoria del programma che lampeggia nuovamente). Tuttavia, PIC32 ha un'architettura Harvard modificata che consente l'esecuzione del codice nella RAM. Parallax Propeller si avvale effettivamente della sua capacità di modificare il codice per eseguire restituzioni di subroutine, poiché non ha stack hardware.


1

Un microcontrollore è generalmente una soluzione a chip singolo per fornire funzioni di calcolo e periferiche.

Un microprocessore fornisce le funzioni di calcolo ma non le funzioni periferiche.

Le funzioni periferiche possono essere semplici come avere alcuni bit di I / O semplici; o potrebbe includere contatori e timer sofisticati, display video, Ethernet, controllo motore, codec audio e video, ecc.

Per una data architettura (diciamo CPU e MCU basate su x86), la codifica "computazionale" sarà identica. Ma il modo in cui accedi alle funzioni periferiche varierà, e quindi avrai una codifica specifica dell'hardware molto diversa da fare, in base a come viene implementata la funzionalità periferica sul tuo hardware di destinazione.


1

I microprocessori sono in genere utilizzati nei computer costruiti per eseguire programmi con scopi arbitrari ma da determinare. Tali computer avranno generalmente un codice fornito dal fornitore con il quale ci si aspetta che il codice fornito dall'utente interagisca. I microcontrollori, al contrario, vengono generalmente utilizzati in macchine costruite al solo scopo di eseguire un singolo programma. Spesso, qualcuno che scrive codice per un microcontrollore fornirà ogni singola istruzione che la macchina eseguirà.

Alcuni microcontrollori utilizzano gli stessi set di istruzioni dei comuni microprocessori. Il set di istruzioni 68000 utilizzato nelle linee di personal computer Macintosh, Amiga e Atari ST originali è stato utilizzato anche in alcuni microcontrollori. Anche se il set di istruzioni utilizzato da un Macintosh e una scheda di controllo basata su 68HC340 è lo stesso, tuttavia, la programmazione per le due piattaforme potrebbe essere molto diversa. Su Macintosh, quando verrà avviato un programma fornito dall'utente, gran parte del sistema sarà già "configurato". Il codice che desidera un blocco di memoria può caricare un registro con la quantità necessaria ed eseguire un'istruzione "A-trap". Il sistema operativo Macintosh restituirà quindi un puntatore a un po 'di memoria che non è stata precedentemente allocata per qualche altro scopo e contrassegnerà quell'area di memoria in modo che vinca " essere assegnato nuovamente fino a quando non viene indicato che il destinatario originale non ne ha più bisogno. Al contrario, su una scheda con un 68HC340 e 128K di RAM, non c'è bisogno o capacità di "chiedere" RAM. All'avvio del programma, "prenderà" 128K che può usare come vuole; nient'altro lo userà, ma il rovescio della medaglia il programma dell'utente deve tenere traccia di quali aree sta usando per quali scopi poiché nient'altro lo seguirà.

Mentre la distinzione qui è in realtà tra un microcomputer rispetto a un microcontrollore e la domanda riguarda i microprocessori, la maggior parte delle discussioni sulla programmazione dei microprocessori ne discute nel contesto di un computer generico.


0

Microprocessore: un modulo hardware digitale che esegue le istruzioni. Il modulo può essere un circuito integrato completo.

Microcontrollore: un modulo completo che contiene un microprocessore con memoria interna oltre ad altri moduli.


Benvenuto in EE.SE, Mike. Utilizzare <invio> x 2 per l'interruzione di paragrafo. L'ho riparato per te.
Transistor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.