Différences de programmation entre un microcontrôleur et un microprocesseur?


9

Donc, je vois souvent des livres / tutoriels et des références lors de la programmation en assemblage à un microprocesseur ..... alors je vois certains s'y référer comme un microcontrôleur.

Par exemple, l'Atmel ATtiny2313 .... j'ai vu des tutoriels, certains l'appellent un microprocesseur, certains l'appellent un microcontrôleur?

Lequel est-ce? et leur programmation (essentiellement) est-elle la même? (en montage)



1
@Kellenjb: Ce serait le cas s'il ne posait pas de questions sur les différences de programmation. Je pense que c'est assez différent pour ne pas fermer.
BG100

1
@ BG100, la réponse acceptée n'a vraiment expliqué la différence, pas une différence de programmation.
Kortuk

Réponses:


14

C'est vraiment deux questions en une ...

Premièrement, quelle est la différence entre un microcontrôleur et un microprocesseur?

Le microprocesseur est purement un CPU qui suit un ensemble d'instructions lues à partir d'un bus mémoire externe. Il contrôle les périphériques externes (tels que l'écran, le clavier, la souris, le disque dur, etc.) via un bus de communication externe. Lorsque vous programmez un microprocesseur, votre programme est externe à l'appareil. Dans un ordinateur, cette mémoire est initialement la ROM du BIOS de démarrage qui lit initialement le système d'exploitation du disque dur dans la mémoire RAM, puis continue de l'exécuter à partir de là.

Le microcontrôleur est un peu comme un processeur + mémoire tout-en-un, avec quelques ports externes pour communiquer avec le monde extérieur. Il est autonome et n'utilise pas de mémoire externe pour contenir son programme (bien que si nécessaire, il peut lire et écrire des données de travail dans la mémoire externe).

Deuxièmement, la programmation d'un microcontrôleur et d'un microprocesseur est-elle la même?

À certains égards, oui et à certains égards, non.

Le langage d'assemblage est un terme large qui décrit un ensemble d'instructions que le processeur peut comprendre directement. Lorsque vous «compilez» le langage d'assemblage, il ne compile vraiment rien, tout ce qu'il fait, il le convertit en une séquence d'octets qui représentent les commandes et les prises dans certains emplacements de mémoire relatifs. Ceci est commun aux microprocesseurs et aux microcontrôleurs.

Cependant, différents types de CPU comprennent un ensemble différent d'instructions de CPU. Par exemple, si vous écrivez un programme en langage assembleur qui fonctionne avec un microcontrôleur pic 16F877, ce sera un non-sens pour un microprocesseur ou tout autre microcontrôleur en dehors de la famille de microcontrôleurs pic 16Fxxx.

Ainsi, bien que l'assemblage fonctionne de manière similaire sur tous les microprocesseurs et microcontrôleurs, la liste réelle des instructions que vous écrivez est très différente. Pour écrire en langage assembleur, vous devez avoir une connaissance approfondie de l'architecture de l'appareil, que vous pouvez normalement obtenir de la fiche technique dans le cas d'un microcontrôleur.


Eh bien ce que je voulais dire était oui ASM sera différent pour chacun ..... mais les commandes / etc sont-elles généralement les mêmes (ou faites de la même manière) entre un MC et un MP ... Je veux dire qu'un MC a un MP donc je suppose que oui .. (moins la mémoire)

@Sauron: Non, pas vraiment .. alors que certaines commandes peuvent être similaires entre les appareils, comme add, mov, sub, etc., elles sont probablement implémentées différemment et ne seront pas portées entre les appareils.
BG100

1
Excellente réponse, et qui aurait probablement pu m'aider lorsque je commençais ma classe de microprocesseurs.
pfyon

eh bien ce que je voulais dire était ...... Comme depuis un microcontrôleur a un CPU à l'intérieur ... les instructions d'assemblage visent plus le CPU réel que les composants qui l'entourent.

@Sauron: Oui, c'est exact.
BG100

10

La différence est que le microcontrôleur comprend une mémoire sur puce comme Flash EEPROM et RAM, et des périphériques comme E / S parallèle et série. Avec les premiers microprocesseurs, il s'agissait de périphériques externes. Au lieu des microprocesseurs des E / S, une adresse et un bus de données ont été apportés à leurs broches.
La façon dont vous écrivez le code pour l'un ou l'autre est la même.

Pour illustrer ce point: il existe des architectures (ARM par exemple) où le même processeur est disponible en tant que microcontrôleur (avec tout le code et la mémoire de données sur la puce), en tant que microprocesseur (tout le code et la mémoire de données externes), ou en tant qu'hybride (certains mémoire sur la puce, mais pour la plupart des applications, vous ajouterez de la mémoire externe). Le CPU est le même, donc la programmation (au sens des instructions CPU) est la même.


Oh ok, c'est plus logique, mais l'ASM pour chacun est fondamentalement le même?

Vous voulez dire que si j'apprends à coder pour la série Cortex M, je peux aussi coder pour la série Cortex A ??
0xakhil

Fondamentalement, oui aux deux questions, les instructions asm sont les mêmes (bien qu'il puisse y avoir des variations mineures, tout comme différentes versions d'ARM peuvent ajouter des instructions spécifiques). Mais chaque fois que vous utilisez des choses en dehors du CPU (cache, contrôleur d'interruption, périphériques, etc.), il y aura de grandes différences.
Wouter van Ooijen

8

Bien que cela ait tendance à être une zone grise, une autre différence courante entre les microcontrôleurs et les microprocesseurs est que les microcontrôleurs utilisent souvent l'architecture Harvard (espace d'adressage séparé pour le code et les données), tandis que les micrprocesseurs utilisent presque tous l' architecture Von Neumann (espace d'adressage combiné pour le code et les données) .

Exemples de familles de contrôleurs utilisant l'architecture Harvard: AVR, Intel 8051, PIC (sauf PIC32, voir ci-dessous) et ARM Cortex-M3. Une exception notable est les processeurs Freescale, comme le HCS08, qui utilisent l'architecture Von Neumann, tout comme l'hélice Parallax.

Cela affecte la programmation de plusieurs manières (les exemples ci-dessous utilisent C):

Il peut y avoir plusieurs types de RAM, chacun avec son propre espace d'adressage. Par exemple, le 8051 a des données externes (xdata) qui sont adressées séparément des 256 premiers octets de RAM, même si les deux sont implémentées sur la même puce. Il faut donc utiliser des qualificatifs sur les déclarations de variables commeunsigned int xdata foo;

Si les constantes sont déclarées dans la mémoire de code, il peut être nécessaire de les copier dans la RAM avant de pouvoir y accéder. Ou, il doit y avoir un moyen d'accéder à la mémoire de code comme s'il s'agissait de données - par exemple le qualificatif de code pour les 8051, ou la fonctionnalité PSV (Program Space Visiblity).

Ces façons non standard d'accéder au code et à la RAM ont tendance à être la principale différence (outre les périphériques) lors du portage du code C d'une famille de puces à une autre.

Vous ne pouvez pas exécuter de code à partir de la RAM dans une architecture Harvard stricte, il ne peut donc pas y avoir de code auto-modifiable (sauf si vous comptez la resynchronisation de la mémoire du programme à la volée). Cependant, le PIC32 a une architecture Harvard modifiée qui permet au code d'être exécuté en RAM. Le Parallax Propeller utilise en fait sa capacité à modifier le code pour effectuer des retours de sous-programme, car il n'a pas de pile matérielle.


1

Un microcontrôleur est généralement une solution monopuce pour fournir des fonctions de calcul et périphériques.

Un microprocesseur fournit les fonctions de calcul mais pas les fonctions périphériques.

Les fonctions périphériques peuvent être aussi simples que d'avoir quelques bits d'E / S simples; ou peut inclure des compteurs et des minuteries sophistiqués, un affichage vidéo, un Ethernet, une commande de moteur, un codec audio et vidéo, et cetra.

Pour une architecture donnée (disons les CPU et MCU x86), le codage "informatique" sera identique. Mais la façon dont vous accédez aux fonctions périphériques variera, et vous aurez donc un codage spécifique au matériel très différent à faire, en fonction de la façon dont la fonctionnalité périphérique est implémentée sur votre matériel cible.


1

Les microprocesseurs sont généralement utilisés dans les ordinateurs qui sont construits pour exécuter des programmes à des fins arbitraires encore à déterminer. Ces ordinateurs contiennent généralement du code fourni par le fournisseur avec lequel le code fourni par l'utilisateur devrait interagir. Les microcontrôleurs, en revanche, sont généralement utilisés dans des machines conçues dans le seul but d'exécuter un seul programme. Souvent, quelqu'un qui écrit du code pour un microcontrôleur fournira toutes les instructions que la machine exécutera.

Certains microcontrôleurs utilisent les mêmes jeux d'instructions que les microprocesseurs courants. Le jeu d'instructions 68000 utilisé dans les gammes originales d'ordinateurs personnels Macintosh, Amiga et Atari ST a également été utilisé dans certains microcontrôleurs. Même si le jeu d'instructions utilisé par un Macintosh et une carte de contrôle basée sur 68HC340 est le même, cependant, la programmation pour les deux plates-formes est susceptible d'être très différente. Sur Macintosh, au moment où un programme fourni par l'utilisateur commence à s'exécuter, une grande partie du système sera déjà «configuré». Le code qui veut un bloc de mémoire peut charger un registre avec la quantité nécessaire et exécuter une instruction "A-trap". Le Macintosh OS retournera alors un pointeur sur une mémoire qui n'a pas été précédemment allouée à une autre fin et marquera cette zone de mémoire pour qu'elle gagne. t être attribué à nouveau jusqu'à ce que le destinataire d'origine n'en ait plus besoin. En revanche, sur une carte avec un 68HC340 et 128K de RAM, il n'y a ni besoin ni possibilité de "demander" de la RAM. Lorsque le programme démarre, "obtient" 128 Ko qu'il peut utiliser comme bon lui semble; rien d'autre ne l'utilisera, mais d'un autre côté, le programme de l'utilisateur doit garder une trace des zones qu'il utilise à quelles fins, car rien d'autre ne suivra cela.

Alors que la distinction ici est vraiment entre un micro - ordinateur et un microcontrôleur, et la question concerne les microprocesseurs, la plupart des discussions sur la programmation des microprocesseurs en parlent dans le contexte d'un ordinateur à usage général.


0

Microprocesseur: module matériel numérique qui exécute des instructions. Le module peut être un circuit intégré complet.

Microcontrôleur: Un module complet qui contient un microprocesseur avec mémoire interne en plus d'autres modules.


Bienvenue à EE.SE, Mike. Utilisez <enter> x 2 pour le saut de paragraphe. Je l'ai réparé pour vous.
Transistor
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.