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.
la source
Réponses:
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, puisrallumez 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
la source
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.
la source
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.
la source
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!
la source
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
la source
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.
la source
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.
la source
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.
la source
Je suis récemment tombé sur un distributeur automatique de cigarettes fonctionnant sous Ubuntu (la machine redémarrait, donc je pouvais voir le logo).
la source
Jetez un œil à Embedded Systems Magazine et Circuit Cellar
la source
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 )
la source
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.
la source
Un ingénieur m'a dit que les trains de banlieue Siemens Light-Rail roulaient sur des 386.
la source