Comment les machines du quotidien sont-elles programmées?

147

Comment les machines du quotidien (pas tant les ordinateurs et les appareils mobiles que les appareils, les montres numériques, etc.) sont-elles programmées? Quel type de code entre dans la programmation d'un distributeur automatique Coca-Cola? Comment ma cafetière accepte-t-elle une heure préprogrammée et commence-t-elle à préparer une cafetière quelques heures plus tard, lorsque cette heure arrive?

Ces types de machines ont-ils des systèmes d'exploitation à l'intérieur, ou est-ce quelque chose d'encore plus basique? Sont-ils écrits en Assembly, C ou dans une autre langue?

Et, j'aimerais vraiment trouver une ressource qui répertorie ces systèmes d'exploitation ou systèmes de code sous-jacents, peut-être même avec le code source si possible. Si quelqu'un connaît une telle ressource (la recherche n'a rien donné pour moi), ce serait fantastique.

Josh Leitzel
la source
12
Question fantastique! Je me suis demandé la même chose moi-même.
Jonathan Sterling
7
Faites quelques recherches / recherches sur les "systèmes embarqués" (j'ai même ajouté la balise pour vous).
mu est trop court
InRe the close votes: Je ne vois pas cela comme du matériel pour les programmeurs car il s'agit de programmation . Par contre ça pourrait bien faire sur le site de l'électronique SE, simple car il y aura plus de spécialistes. La réponse, bien sûr, est une partie de tout ce qui précède. Vous devrez choisir une classe plus petite avant de pouvoir obtenir une réponse.
dmckee --- ex-moderator chaton
Sa question très large qui couvre au moins 3 disciplines d'ingénierie et de nombreuses nuances entre elles.
Jodrell
FWIW, vous pourriez être intéressé à jouer avec une plate-forme de microcontrôleur telle que Arduino (~ 30 $) arduino.cc .
steamer25

Réponses:

47

La plupart de ce dont vous parlez sont des systèmes embarqués où C est un luxe souvent indisponible. Ils n'ont pas de logiciel au sens traditionnel du terme. La plupart du temps, le logiciel est écrit en C, en assemblage ou même en code machine. C et ASM nécessitent que des compilateurs soient écrits pour les utiliser pour cette plate-forme. Le code machine est écrit sous forme de binaire sans compilateur.

Votre cafetière et la plupart des systèmes simples comme celui-ci ne comportent pas de système d'exploitation. Ils se chargent simplement à partir d'une adresse de départ en mémoire et vous y mettez votre code. Souvent, ces systèmes ont leur «code» gravé dans les EEPROMS qui agissent comme le disque dur du système. Bousillez le code après avoir brûlé les proms, jetez les puces, puis rallumez le code sur la puce et recommencez. Il existe des puces FPGA plus récentes que les appareils haut de gamme utilisent pour faciliter les tests, le déploiement, etc., mais c'est la même chose.

Les machines Coca-Cola, les routeurs, etc. utilisent généralement un système d'exploitation en temps réel comme QNX, EMBOS ou parfois RTlinux si vous avez de la chance. La plupart d'entre eux sont des systèmes d'exploitation propriétaires que vous octroyez une licence pour beaucoup d'argent, mais ils ont des compilateurs C, des pilotes pour fonctionner avec du matériel, etc.

http://www.qnx.com/

http://www.segger.com/cms/embos.html

http://www.microsoft.com/windowsembedded/en-us/campaigns/compact7/default.aspx?WT.srch=1&WT.mc_ID=SEARCH

RTLinux

chubbsondubs
la source
35
Les gens codent en binaire? Les assembleurs sont si stupidement simples à écrire que j'ai du mal à le croire. Avez-vous une source pour cela? De plus, cette réponse donne la fausse impression que tous les systèmes contiennent un microprocesseur qui exécute le code. Bien que cela devienne de plus en plus populaire à mesure que les microcontrôleurs et l'EEPROM (qui facilitent le débogage et la mise à niveau) deviennent moins chers, cela n'en vaut toujours pas la peine pour des systèmes très bon marché ou des systèmes qui n'ont pas beaucoup changé au cours des 20 dernières années. Par exemple, certaines montres numériques.
BlueRaja - Danny Pflughoeft
6
C'est tout simplement trop fort. Vous n'avez pas besoin d'héberger le compilateur sur la cible. Les compilateurs croisés sont très courants dans la programmation embarquée.
dmckee --- ex-moderator chaton
12
Une machine à coke fonctionnant avec QNX? WTF - c'est un autre type de coke! Et oui, il existe un compilateur C pour chaque plate-forme actuellement expédiée en volume. Personne ne veut écrire l'assemblage, le manque de C serait un énorme handicap. (Certains compilateurs ne sont pas très bons , d'accord.)
Potatoswatter
8
En outre, l'EEPROM par définition peut être réécrite plus de 100 000 fois. Les mémoires à écriture unique sont obsolètes; tous les microcontrôleurs populaires d'aujourd'hui ont Flash. FPGA est un marché complètement différent du MCU bas de gamme… vous n'avez aucune idée de ce dont vous parlez.
Potatoswatter le
7
J'ai un ami qui travaille sur des distributeurs automatiques assez complexes. Ils ont des radios cellulaires, surveillent l'inventaire, suivent la température, rapportent les chiffres financiers et envoient des appels HTTP aux serveurs pour regrouper toutes ces données afin que vous puissiez suivre toutes vos machines. Et oui, ces marques de machines utilisent un OS embarqué. Je pense qu'ils utilisent RTLinux avec C. Donc, oui, même le petit distributeur automatique devient suffisamment complexe pour justifier un système d'exploitation intégré.
chubbsondubs
29

Ils utilisent des microcontrôleurs, le 8051 est le classique. Ce sont des cœurs 8 bits ou 16 bits, ils ont rarement un système d'exploitation. Le programmeur écrit le code pour initialiser les périphériques intégrés et implémenter les gestionnaires d'interruption. Les langages utilisés sont l'assemblage et C. Les tâches de débogage difficiles nécessitent un émulateur en circuit.

Il y a beaucoup de place de plus en plus au-delà de cela, avec des cœurs embarqués 32 bits (ARM est le gorille de 100 livres) qui démarrent une version embarquée de Linux et / ou de la JVM Java.

Hans Passant
la source
5
C'est un gorille plutôt petit, mais je suppose que les contraintes de puissance sont plutôt importantes avec les grands singes intégrés;)
Piskvor a quitté le bâtiment le
Je vous remercie! Votre réponse m'a été utile et je vous ai donné un vote favorable.
Josh Leitzel
Les puces ARM entrent également dans le bas de gamme ... avec des prix <1 USD, une empreinte de 2x2 mm.
domen
24

Ce sont des systèmes embarqués , et seraient programmés en utilisant un langage de très bas niveau tel que C ou assembly. En général, un tel système fonctionnera sans système d'exploitation, bien que certaines «machines quotidiennes» plus récentes telles que les lecteurs de DVD blue-ray et les routeurs sans fil exécutent leur code sur un système d'exploitation basé sur unix.


Mettre à jour

À l'instar de ce que d'autres ont dit, de nombreux systèmes embarqués modernes exécutent également une saveur de fenêtres. Cela dépend de l'application. En outre, il existe une tendance dans de nombreux espaces à fonctionner sur une plate-forme plus puissante avec un système d'exploitation, à gérer des cas tels que les lecteurs Blue-ray nécessitant d'exécuter Java, et d'autres instances où l'utilisateur final souhaite plus de fonctionnalités.

Justin Ethier
la source
Pour clarifier, Bluray utilise Java.
Andrew Marshall
6
Peut-être, mais les joueurs actuels exécutent Linux et sont écrits en C / C ++
Justin Ethier
Les caisses enregistreuses et les pompes à essence et autres fonctionnaient dos (certaines marques), malheureusement certaines de ces fenêtres fonctionnent maintenant (épicerie ou autres lignes de caisse en libre-service). Le désir d'avoir des émissions de télévision qui vous hurlent pendant que vous pompez votre essence et que vous dansez à l'écran quand ce n'est pas le cas, a conduit à plus de puissance. De même les machines à coke et à eau avec la pince à deux axes.
old_timer
@Justin, eh bien oui bien sûr, Java a besoin de s'asseoir sur quelque chose pour fonctionner. Mon point était qu'il utilise un langage de haut niveau (comparativement) comme Java.
Andrew Marshall
@Andrew: Et sur quel système d'exploitation l'interpréteur Java dans le blue ray fonctionne-t-il? Et dans quelle langue ce système d'exploitation est-il écrit?
Gunther Piez
18

Pensons au processeur de votre bureau. Tout ce qu'il fait, c'est exécuter les instructions de la machine, et par lui-même, ne se préoccupe pas vraiment des «systèmes d'exploitation» ou des «programmes».

Vous allumez votre ordinateur, le processeur pointe vers la première instruction et il commence à s'exécuter.

Sur votre bureau, il démarre l'exécution du "système d'exploitation". Mais il n'y a aucune raison pour que le processeur ne puisse pas exécuter un ensemble d'instructions que vous avez choisi. (Cela peut ne pas être très utile, car vous voudriez toujours afficher les résultats à l'écran, et cette fonctionnalité réside dans le système d'exploitation.) En même temps, si les instructions de votre machine se composaient des bons opcodes pour que le processeur produise la séquence correcte de signaux pour peindre une image sur le moniteur, tant mieux. Aucun système d'exploitation nécessaire.

Les ordinateurs de bureau font tellement de choses que nous avons généralement besoin de l'abstraction d'un système d'exploitation. Mais à la base, tout ce que fait le processeur est d'exécuter des instructions.

Idem pour le processeur dans les machines à coke et les machines à café. Tout ce qu'il fait, c'est exécuter des instructions.

Eh bien, écrire les instructions de la machine petit à petit est fastidieux. Ainsi, tout comme pour les bureaux, nous écrivons généralement du code en C, qui est ensuite compilé en code machine. Ce code machine est chargé sur le processeur intégré et il s'exécute.

Les systèmes embarqués font si peu qu'ils n'ont pas besoin de systèmes d'exploitation complets. Un microcontrôleur peut avoir 8 ou 16 broches sur la puce - par rapport à des dizaines de broches dans votre socket CPU habituel.

Le flux de travail consiste donc à écrire du code (par exemple, en C), à le compiler sur votre ordinateur de bureau. Ce compilateur génère du code machine pour la puce intégrée. Ensuite, ce code est chargé sur le microprocesseur (et vous avez besoin d'un matériel spécial pour ce faire.) Ensuite, vous alimentez la puce et elle commence à exécuter les instructions. Facile!

poundifdef
la source
2
Merci beaucoup! Si j'avais pu choisir une autre meilleure réponse, elle aurait été la vôtre. Je l'ai trouvé très utile. +1
Josh Leitzel
Les processeurs modernes sont étonnamment très préoccupés par les systèmes d'exploitation. Ils fournissent des fonctionnalités telles que des unités de gestion de la mémoire , des instructions et des modes privilégiés et la virtualisation matérielle . Les systèmes d'exploitation modernes dépendent de certaines de ces fonctionnalités. C'est la raison pour laquelle vous ne pouvez pas ( facilement ) exécuter Linux sur de petits microcontrôleurs.
Mira Weller
12

De nombreux appareils qui exécutent une fonction spécifique ne contiennent aucun "code". Ils remplissent leurs fonctions via les propriétés de leurs composants électroniques. Des systèmes plus avancés, qui peuvent exécuter de nombreuses fonctions différentes ou doivent être facilement évolutifs, contiendront un microcontrôleur et une sorte de «système d'exploitation». Comme ceux-ci ont encore des limites à leurs fonctionnalités, le système d'exploitation sera simple et spécialement conçu. En devenant encore plus avancé, l'appareil contiendra quelque chose de similaire à un ordinateur. Il aura un système d'exploitation plus compliqué qui peut communiquer avec différentes parties du système. Enfin, vous atteignez des appareils tels que les téléphones intelligents, qui contiennent un système d'exploitation complet qui peut exécuter du code de niveau utilisateur et avoir beaucoup plus d'entrées utilisateur que les appareils plus simples. cependant, même les processeurs modernes sont essentiellement de très gros circuits électriques. Chaque instruction reconnue par la CPU entraînera l'utilisation d'un circuit différent pour exécuter cette fonction.

Voici quelques pages Wikipédia qui pourraient vous intéresser:

http://en.wikipedia.org/wiki/Electrical_engineering
http://en.wikipedia.org/wiki/Integrated_circuits
http://en.wikipedia.org/wiki/Electronic_engineering
http://en.wikipedia.org/wiki / Computer_engineering
http://en.wikipedia.org/wiki/Microcontroller

ughoavgfhw
la source
C'est faux. Un facteur majeur dans le coût des puces à faible coût est l'emballage qui transporte le silicium. Pour cette raison, il est moins coûteux de remplacer la logique discrète par un microcontrôleur une fois que vous avez atteint une douzaine de portes ou plus… et une douzaine de portes ne font pas grand-chose. L'ubiquité des MCU a fait grimper le coût des portes discrètes, modifiant l'équilibre. De plus, la plupart des MCU bas de gamme n'exécutent aucun type de système d'exploitation.
Potatoswatter
7

C'est une question très large et cela dépend beaucoup de la machine. Je ne peux que deviner que la majorité de ces distributeurs automatiques sont contrôlés par des microcontrôleurs (8051, PIC, ARM7, pour n'en nommer que quelques-uns des plus utilisés) et ont rarement un système d'exploitation et s'il en a, ce serait une sorte de RTOS, comme FreeRTOS .

Des machines plus complexes, telles que des lecteurs DVD / BluRay ou des téléphones portables, fonctionnent sur des plates-formes sophistiquées, telles que OMAP4 . Habituellement, un système d'exploitation Unix fonctionne sur eux.

Thiago Cardoso
la source
Merci pour votre réponse! +1
Josh Leitzel
7

Les microcontrôleurs bas de gamme trouvés dans les appareils de tous les jours n'exécutent généralement pas de système d'exploitation. Ils sont choisis pour leur faible coût, et les principaux facteurs à l'origine de ce coût sont le nombre de broches sur la puce (d'une douzaine à quelques centaines) et la quantité de mémoire à l'intérieur (de quelques kilo-octets à un mégaoctet de ROM, de quelques octets à cent kilo-octets de RAM).

Comme le fluage des fonctionnalités fait sa magie, il arrive qu'un micro-ondes doive effectuer plusieurs tâches. Dans ce cas, le programmeur rappelle son cours sur les systèmes d'exploitation et implémente la transmission de messages, la planification des tâches, les E / S asynchrones, etc. si nécessaire!

Bien sûr, pour des raisons de commodité, de simplicité, de taille de code, etc., les fonctionnalités ont tendance à être effectuées de manière rudimentaire. Cela dépend souvent de la façon dont vous analysez le programme, pour trouver des fonctionnalités générales du système d'exploitation dans le code spécifique à la tâche. Mais c'est loin d'un planificateur de tâches codé en dur à un système d'exploitation, et lorsque vous n'avez que quelques kilo-octets pour travailler, un système d'exploitation standard n'est pas la solution.

Jetez un œil à DigiKey, un site de sélection de pièces électroniques populaire, pour en savoir plus sur les microcontrôleurs bas de gamme. Voici leurs informations sur un MCU très bon marché avec un contrôleur LCD, comme on pourrait en trouver dans une machine à café. Il est assez facile d'obtenir le manuel de programmation et tout.

Potatoswatter
la source
5

Le travail d'un système d'exploitation est de fournir un accès partagé aux ressources - temps d'exécution du processeur, RAM, E / S, etc. La plupart des systèmes embarqués basés sur des microcontrôleurs simples n'ont qu'un seul programme en cours d'exécution à la fois, et ils accèdent (et gèrent) ces ressources eux-mêmes , par conséquent, ils n'ont pas besoin d'un système d'exploitation.

Les systèmes embarqués sont généralement programmés en C, et parfois en assemblage pour une synchronisation extrême ou une optimisation de la mémoire. Certains compilateurs intégrés vous permettent d'intercaler l'assemblage dans un langage de niveau supérieur.

Nick Forge
la source
4

Je suis récemment tombé sur un distributeur automatique de cigarettes fonctionnant sous Ubuntu (la machine redémarrait, donc je pouvais voir le logo).

Ryyst
la source
1

Si vous recherchez des informations générales sur Google, recherchez des éléments tels que «systèmes embarqués», «soc» (système sur puce). Je dirais qu'une grande partie de ces types d'appareils fonctionnent dans des langages de bas niveau, tels que C.

Fait amusant: Java a été initialement conçu comme une solution à la programmation de systèmes embarqués: http://en.wikipedia.org/wiki/Oak_(programming_language )

Travis Webb
la source
Merci, je ne manquerai pas de les rechercher plus loin! +1
Josh Leitzel
1

La plupart des kiosques, des registres, des écrans de service au volant et même des machines à café et micro-ondes haut de gamme fonctionnent sous Windows XP ou Linux, comme les machines de la série "Jura Impressa"; vous pouvez les SSH et préparer du café.

Voici un script github d'un travail cron de machine à café: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

La plupart des routeurs, des fours plus récents, des réfrigérateurs plus récents, des voitures, des lecteurs DVD, divers appareils électroniques, des produits domotiques plus récents, y compris des ampoules, exécutent une version d'ARM linux ou Linux embarqué.

La plupart des appareils moins chers, à moins de 20 $, s'ils sont plus récents, fonctionnent sur l'ESP8266 ou un appareil similaire (peut exécuter LUA ou un serveur Node réduit pour 2 $ en vrac - incroyablement bon marché)

http://nodemcu.com/index_en.html

L'utilisation de FPGA et de systèmes embarqués comme 8051, Z80 ou d'autres périphériques embarqués tels que PICC, AVR et Arduino vont bientôt être remplacés par des systèmes tout-en-un / SoC (System on Chip) comme l'ESP8266. Ils sont tout simplement trop faciles à programmer et constituent un système complet sur une puce qui exécute leur propre serveur Web; il vous suffit de les mettre sous tension, de télécharger votre code source et vous avez un serveur en réseau pour 2 $.

J'ai grandi en codant PICC et AVR et 8051, et je suis triste de les voir partir, mais je n'ai touché à rien d'autre que les ESP8266 depuis des années car ils coûtent 1 / 10ème du prix et sont un ordre de grandeur plus faciles à travailler . Vous pouvez les obtenir sur des cartes de développement avec des batteries et des dispositions de broches éclatées pour 5 $ sur ebay ou 10 $ sur adafruit.

Nick Steele
la source
-2

Un ingénieur m'a dit que les trains de banlieue Siemens Light-Rail roulaient sur des 386.

Luser droog
la source