Pourquoi devrais-je apprendre une architecture de microcontrôleur? [fermé]


8

J'ai récemment commencé à travailler dans une petite entreprise qui produit de l'électronique liée au diagnostic automobile. Mon patron, qui est dans la mi-cinquantaine, a dit qu'il utilisait 8051 dérivés et qu'ils faisaient le travail. J'ai ensuite cherché sur Google pour savoir si 8051 est toujours populaire aujourd'hui. Et à Quora, je les ai vus:

... c'est probablement l'architecture MCU la plus simple qui soit. Chaque périphérique ressemble à la version simple. Mes concepts de minuteries, de pointage, d'UART, etc. se sont beaucoup éclairés! Et, j'ai alors commencé à apprécier d'autres architectures - parce que j'ai réellement compris la différenciation.

... évidemment, il ne sera utilisé par aucune industrie pour développer un produit en raison de sa simplicité ...

Mais pourquoi? Jusqu'à présent, au moins en tant qu'étudiant, j'avais l'habitude de faire beaucoup de choses sans jouer avec l'architecture. J'ai heureusement codé avec C, j'ai utilisé des périphériques LCD, connectés à d'autres circuits intégrés avec différents protocoles (SPI, I2C, etc.)

Pourquoi devrais-je me soucier de l'architecture de mon microcontrôleur, en dehors des domaines limités d'applications en temps réel et à temps critique?


3
Soit pour le plaisir, soit parce que vous avez besoin de faire un projet avec une telle architecture, évidemment.
PlasmaHH

Aujourd'hui, 8051 est tout au plus un passe-temps. D'un autre côté, si vous commencez à travailler avec quelque chose de moder comme ARM Cortex M4, vous n'avez pas vraiment besoin d'apprendre l'architecture. Ne pas commencer au moins
Gregory Kornblum

@PlasmaHH J'aurais aimé avoir assez de temps pour "m'amuser" avec chaque sujet sur l'électronique, mais c'était dans mes années d'étudiant :)
CK

6
vous devez être conscient de l'architecture lorsque vous avez besoin de performances, ce qui ne se produira probablement pas. Pour vous donner un exemple, si vous avez besoin d'effectuer plusieurs calculs à plusieurs reprises, et que vous avez un temps limité, vous devrez peut-être ne pas utiliser les données stockées en flash ou optimiser l'utilisation des registres. Mais cela n'arrive aujourd'hui qu'à un nombre très limité de professionnels. Il vous faudra du temps pour y arriver. Pour l'instant, je ne ferais pas d'erreur en supposant que l'écriture de C suffit pour vos prochaines années.
Gregory Kornblum

2
Je laisse le soin à ceux qui savent peut-être mieux :)
Gregory Kornblum

Réponses:


30

Le 8051 et les autres microcontrôleurs à faible bit sont-ils toujours utilisés aujourd'hui?

Oui, presque partout. Ils sont petits et faciles, il y a beaucoup de cœurs flottants que vous pouvez mettre dans votre silicium personnalisé à faible coût ou sans frais, il y a des compilateurs matures. Tout cela fait du 8051 l'une des architectures principales les plus populaires parmi les fabricants de silicium. Les cœurs ARM peuvent être disponibles dans des produits plus différents, mais là encore, lorsque vous parlez à quelqu'un qui construit de nombreux appareils à une contrainte de prix très stricte, il est probable qu'il va préférer un cœur 8051 moins cher / gratuit s'il fait le travail. . Juste pour opposer @ Nitro2k01 réclamation d'utilisation de niche uniquement: Mouser compte près de 800 modèles de 8051 micro - contrôleurs en stock ¹. Et le fait que ceux-ci commencent, même chez Mouser, à des prix inférieurs à 40 ct pourrait être une indication de leur utilisation:

microcontrôleurs grand public, bas rendement et haut volume

Donc:

... évidemment, il ne sera utilisé par aucune industrie pour développer un produit en raison de sa simplicité ...

est un non-sens absolu de haute qualité. Surtout que vous livrez vous-même un contre-exemple

Mon patron, qui est dans la mi-cinquantaine, a dit qu'il utilisait 8051 dérivés et qu'ils faisaient le travail.

Exactement! Ils sont utilisés partout, ils sont bien éprouvés et bon marché, et ils sont suffisants ; ne sous-estimez jamais l'avantage d'avoir une solution à un problème commun dans un tiroir quelque part!

Bien sûr, il arrive souvent que vous ayez besoin d'une solution avec, disons, deux bus automobiles typiques, une interface haut débit vers un ADC, des temporisateurs de surveillance fiables, trois unités PWM ... et ensuite vous commencez à reconstituer quelque chose consistant en quatre dérivés 8051 et 8080 .. euh. C'est une mauvaise situation, et pourrait très probablement être résolu beaucoup plus rapidement et plus fiable en utilisant un MCU unique, plus polyvalent et plus puissant (par exemple un ARM). Mais que "nous avons des connaissances sur la façon dont quelque chose fonctionne avec une ancienne technologie" vs "nous sommes à l'épreuve du temps en ayant la possibilité de fonctionner sur du matériel moderne" est un compromis classique en matière de sécurité des investissements. Si vous rencontrez l'un de ces projets, j'essaierais de parler au patron dans ce contexte. Pour les petits travaux faciles, oui, 8051.

Dois-je prendre la peine d'en savoir plus sur les architectures MCU en général?

Oui! Je pense que @jfkowes l' explique très bien. Mais honnêtement: c'est un peu comme demander "devrais-je apprendre comment fonctionne le moteur à combustion interne si je veux devenir mécanicien automobile"; la réponse est "vous pourriez bien vivre si vous pouvez simplement exécuter les manuels de réparation assez bien, mais vous serez probablement un bien meilleur technicien (laissez l'ingénieur seul) si vous comprenez ce que fait votre matériel.

Dès que vous rencontrez un problème qui ne peut pas être recherché par Google, vous serez à peu près une tortue sur le dos si vous ne comprenez pas à peu près comment fonctionne votre processeur.

Dois-je prendre la peine d'apprendre l'architecture 8051?

Probablement pas. Dans le sens où, oui, tant que le coût n'est pas votre objectif principal, vous pouvez très probablement simplement utiliser des MCU beaucoup plus puissants et polyvalents basés sur des cœurs ARM ou d'autres architectures plus modernes.

Là encore, le cœur 8051 est si facile que je recommanderais réellement de comprendre ce que sont ses unités avant d'essayer de s'attaquer à un cœur MCU plus moderne et complexe. C'est un bel exemple.

Donc, si 8051 n'est pas le cœur que je recherche dans une application à faible volume, qu'est - ce que je recherche?

Donc, personnellement: optez pour un ARM Cortex-M0, -M3, -M4F; ceux-ci sont abondants dans toutes sortes de microcontrôleurs abordables, faciles à programmer (oui, prise en charge GCC mature, bibliothèques standard CMSIS, beaucoup de systèmes d'exploitation intégrés fonctionnant sur ceux-ci), et viennent généralement avec des interfaces de débogage standard (ce qui est un grand plus).

De l'extérieur, les ARM sont généralement relativement faciles à comprendre, car vous mappez généralement chaque périphérique dans l'espace mémoire, et c'est tout. En interne, ils ont différents degrés de sophistication et optimisations de vitesse / robustesse / taille, ce qui ne les rend pas parfaitement faciles à comprendre en détail, mais je suppose que cela pourrait être un peu trop demander à moins que vous ne soyez dans la conception du processeur.

Si vous êtes dans la conception de CPU, je pense (c'est vraiment une croyance personnelle basée sur mon observation des activités de recherche et des investissements "promis" de l'industrie) que nous observons actuellement la montée d'une nouvelle ISA importante - le RISC-V. Il existe différentes implémentations de cette architecture pour les FPGA ou le silicium, et des gens comme Nvidia semblent également jouer avec l'idée de remplacer leurs multiprocesseurs de flux par ce type de cœurs.


¹: Il est très probable que je manque plus de la moitié des 8051 réels que possède Mouser (parce que, hé, je viens de sélectionner tous les MCU dont le nom de base était * 80 * 5 *). Il y a de fortes chances que si vous choisissez un microcontrôleur 8 bits aléatoire, il est probable que son cœur soit au moins partiellement dérivé du 8051. Je veux dire, regardez simplement la "liste des fournisseurs de dérivés [8051]" de wikipedia .


AVR est également une excellente architecture d'apprentissage, avec une documentation exceptionnelle et un support gcc.
chrylis

@Chrylis déteste être en désaccord, mais personnellement, je ne pense pas que les ATMega 8bitters soient une excellente architecture, ni leur documentation ou leur support GCC exceptionnel par rapport au ARM cortex m0, avec lequel ils rivalisent. Mais c'est une opinion personnelle!
Marcus Müller

1
@ MarcusMüller Après quelques expériences avec Atmel, je ne les utiliserais plus (sauf pour le hobby). Atmel dépendait de l'activité d'amateur pour soutenir les entreprises plus petites qu'une certaine "taille" - ce que j'étais toujours plus petit que, car nos qtys n'ont jamais dépassé 6000 par an. Les FAE étaient sympas, mais cela n'a pas aidé la France (AT91) et je les ai donc laissés partir. Microchip, d'autre part, m'a aidé à atteindre des niveaux incroyables, quel que soit le projet. Soutient leur prof. des outils "pour toujours" et même d'anciennes puces sont encore fabriquées. Atmel désormais acheté par Microchip. Alors peut-être changer là-bas et je regarderai à nouveau.
jonk

1
@jonk donc, alors que PIC / microchip a une bonne réputation de service et pourrait survivre à cela seul, l'extension du portefeuille Atmel pourrait se bloquer. Et, mon espoir pour la prochaine décennie: comme nous en avons discuté dans les commentaires d'une autre réponse il y a un certain temps, s'il s'avère juste que les "services de navette" de wafers deviennent de plus en plus abordables, et avec des 32 bits très compétitifs / éventuellement 64 bits / optionnels RT garantit des architectures comme RISC-V dans différentes tailles et vitesses (mises en œuvre sous forme de cœurs par le nom de BOOM, Rocket-chip ou PicoRV32), le "diable, j'ai un problème spécial, je peux obtenir un MCU spécial" sera ...
Marcus Müller

1
@ MarcusMüller On peut espérer. Si les choses tournent autour du support client, Microchip abat simplement tout le monde. J'ai eu un outil professionnel, âgé de 12 ans, où l'interrupteur d'alimentation est devenu "feuilleté". J'ai appelé pour demander s'ils pouvaient me donner le numéro de pièce du commutateur afin que je puisse en commander un et réparer l'appareil. Au lieu de cela, ils ont exigé de m'envoyer une unité de remplacement, me l'ont envoyée et une boîte pour leur retourner l'ancienne, et elle est arrivée le matin suivant! Sans frais. J'ai demandé: "Avez-vous besoin d'une preuve d'achat?" Ils ont dit: "Non. Rendez simplement l'autre unité. La possession physique est tout ce dont nous avons besoin." La chose sacrée était ancienne.
jonk

12

En général, voici quelques bonnes raisons d'apprendre (ou du moins d'avoir une connaissance pratique) de l'architecture du microcontrôleur que vous utilisez.

Attention: dans le contexte de votre travail, de l'entreprise, de l'application, du matériel associé, etc., il peut y avoir des raisons pour lesquelles vous ne devriez pas apprendre l'architecture particulière que vous utilisez actuellement.

Débogage

Lorsque des bibliothèques de haut niveau fonctionnent, vous n'aurez peut-être pas besoin de connaître l'architecture. Lorsque vous commencez à avoir des problèmes, connaître les composants internes de votre microcontrôleur peut beaucoup aider à isoler et à résoudre rapidement ces problèmes.

Efficacité et simplicité du code

Si vous connaissez l'architecture, vous pourrez peut-être déplacer les fonctionnalités du logiciel vers le matériel. Cela a le potentiel de réduire la charge logicielle et de supprimer les sources de bogues.

Réduction des coûts

La connaissance de l'architecture peut réduire l'utilisation du programme et de la mémoire de données et la charge du processeur. Cela peut signifier que vous pouvez sélectionner un microcontrôleur avec moins de ressources, réduisant potentiellement les coûts.

Augmenter votre utilité

Même si vous n'utilisez pas les connaissances pour le moment, des discussions avec des collègues / fournisseurs / ingénieurs de support, etc. peuvent faire appel à elle. Par exemple, quelque chose que vous savez pourrait aider quelqu'un d'autre à résoudre un problème qu'il rencontre. Sauver la journée est quelque chose dont les gens se souviennent.

La connaissance est le pouvoir

Même si vous n'avez pas besoin des connaissances dans votre emploi actuel, lorsque vous voyez une annonce pour un emploi qui semble incroyable qui dit "La connaissance de l'architecture de la <famille des microcontrôleurs> est requise / préférée" , vous serez dans une meilleure position y aller.


Là encore, je ne sais pas si vous lirez souvent cette phrase dans une offre d'emploi - c'est une sorte de connaissance mystérieuse, et quiconque est le moins au courant de toute architecture de processeur sera en mesure de prendre le 8051 au cours de ses trois premiers jours de travail, je suppose
Marcus Müller

Bon point, je l'ai édité pour être plus général.
jfowkes

7

Le 8051 et les autres microcontrôleurs à faible bit sont-ils toujours utilisés aujourd'hui?

Oui, mais surtout pour les cas d'utilisation de niche. Ils sont principalement utilisés pour des tâches simples, dans des produits fabriqués en série et axés sur les coûts, ou lorsque des antécédents éprouvés sont souhaitables. Ils sont souvent autorisés et intégrés à une solution à puce unique. En raison de leur architecture simple, il est facile de les intégrer à des périphériques personnalisés sur la même puce. Un autre avantage est qu'ils peuvent être produits sur une petite surface avec des techniques de fabrication de semi-conducteurs plus anciennes (et moins chères).

Un tel exemple se trouve dans la puce de contrôle des cartes à puce, qui utilisent souvent un noyau 8051 ou similaire avec des extensions matérielles cryptographiques. Vous trouverez probablement des cœurs de microcontrôleur 8 bits dans des choses comme le contrôleur d'un moniteur de brosse à dents électrique intelligent. Un calculateur de véhicule utilise souvent un microcontrôleur 8 bits, ainsi qu'un 32 bits, comme chien de garde en raison de leur plus grande fiabilité et de leur complexité plus faible.

Devriez-vous l'apprendre?

Mis à part la possibilité que vous vous retrouviez dans une situation où la connaissance de cette architecture particulière est nécessaire, je dirais que c'est une compétence utile en général. Même si vous programmez C dans votre travail quotidien, il est utile d'avoir une compréhension générale de ce qui se passe «un niveau en dessous». Lors du dépannage de bogues étranges ou d'un problème de performances, il peut être beaucoup plus facile de localiser le problème si vous avez une compréhension générale du matériel sous-jacent. Vous pouvez également analyser plus facilement la sortie du langage d'assemblage du compilateur C. L'apprentissage d'une architecture facilitera également l'apprentissage de différentes architectures à l'avenir. Ces compétences peuvent également vous aider à écrire un meilleur code, même pour des cœurs de processeur plus modernes.


Je serais un peu en désaccord avec la revendication de la "niche"; voir ma réponse ci-dessous :) mais quand même, la vôtre est une bonne réponse!
Marcus Müller

1

Vous pouvez en apprendre beaucoup sur la conception numérique en les apprenant. L'électronique numérique est construite en utilisant deux choses. Les premiers sont la logique, les interconnexions des éléments AND, OR, NOT implémentant une expression logique. (En pratique, d'autres éléments logiques tels que NAND sont réellement utilisés, mais ET, OU et NON sont plus faciles à comprendre.) Deuxièmement, les éléments de mémoire peuvent contenir un ou plusieurs bits. Lorsque des éléments de mémoire sont introduits, les périphériques peuvent avoir ce qu'on appelle un état . Différentes combinaisons de bits dans ses éléments de mémoire correspondent à différents états.

Considérez un distributeur automatique qui commence à l'état 0 et passe à un autre état chaque fois qu'une pièce est insérée. Ce faisant, la machine peut garder une trace du montant total de l'argent, savoir quand suffisamment d'argent a été mis et savoir combien de monnaie retourner.

Pour concevoir les circuits de la machine, en commençant par un diagramme des états avec des flèches montrant les transitions vers d'autres états ainsi que les conditions qui les déclenchent. Pour chaque flèche, une expression logique identifie une condition. On peut alors déterminer quelles sont toutes ces expressions et les implémenter avec des éléments logiques.

Pour un distributeur automatique, ce n'est pas très difficile. Pour les contrôleurs complexes, cela devient beaucoup plus difficile. Les microcontrôleurs sont un moyen rapide et facile de faire la même chose. Considérons une "mémoire" qui (au sens d'un octet ou d'un mot) a une largeur de k bits et a n lignes d'adresse, ce qui donne 2 ^ n emplacements en mémoire. Cette mémoire est programmée avec un design et est en lecture seule en pratique. Notez qu'en utilisant les bits d'adresse de la mémoire comme "entrées" et les bits de données comme sorties, la mémoire peut être programmée pour réaliser n'importe quelle fonction logique.

Ajout d'un registre largeur de k bits également pour contenir le contenu d'un emplacement mémoire produit une machine à états.

Si les k bits sont divisés en, par exemple , un opcode et une adresse. Le jeu de bits opcode contrôle d'autres parties du circuit (comme la distribution d'un produit de distributeur automatique) et les autres sont une adresse mémoire de n bits, chaque jeu de k bits devient une microinstruction avec une capacité de branchement.

Ajoutez à cela une logique arithmétique, quelques registres supplémentaires (où un ou plusieurs d'entre eux prennent des entrées de contrôle pour se déplacer vers la gauche et vers la droite) et vous pouvez construire un CPU dont les instructions machine sont implémentées par une séquence de micro-instructions.

Dans les années 1970 et 1980, un certain nombre d'ordinateurs performants ont été construits en utilisant cette conception. L'un d'eux (VAX 11 de Digital Equipment) avait une instruction machine pour calculer un polynôme entier, destiné aux calculs d'adresse (think array). Il s'est avéré que l'instruction pouvait être mise en œuvre plus rapidement en utilisant des instructions plus simples.

Les microcontrôleurs peuvent être et sont généralement une mise en œuvre moins efficace qu'une machine à états traditionnelle. Mais ils peuvent être facilement modifiés, beaucoup plus rapides à concevoir et constituent d'excellentes solutions de contrôleur.

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.