Wie sind Alltagsmaschinen programmiert?

147

Wie sind alltägliche Maschinen (weniger Computer und mobile Geräte als Geräte, Digitaluhren usw.) programmiert? Welche Art von Code fließt in die Programmierung eines Coca-Cola-Automaten ein? Wie akzeptiert meine Kaffeemaschine eine vorprogrammierte Zeit und beginnt Stunden später, wenn diese Zeit eintrifft, mit dem Brühen einer Kanne Kaffee?

Haben diese Arten von Maschinen Betriebssysteme oder ist es etwas noch grundlegenderes? Sind sie in Assembly, C oder einer anderen Sprache geschrieben?

Und ich würde wirklich gerne eine Ressource finden, die diese Betriebssysteme oder zugrunde liegenden Codesysteme auflistet, möglicherweise sogar mit Quellcode, wenn möglich. Wenn jemand von einer solchen Ressource weiß (die Suche hat mir nichts gebracht), wäre das fantastisch.

Josh Leitzel
quelle
12
Fantastische Frage! Ich habe mich selbst das Gleiche gefragt.
Jonathan Sterling
7
Suchen / recherchieren Sie nach "eingebetteten Systemen" (ich habe sogar das Tag für Sie hinzugefügt).
Mu ist zu kurz
InRe die engen Stimmen: Ich sehe dies nicht als Material für Programmierer, weil es um Programmierung geht . Auf der anderen Seite könnte es auf der Website der Electronics SE gut laufen, einfach weil es mehr Spezialisten geben wird. Die Antwort ist natürlich eine der oben genannten. Sie müssen eine kleinere Klasse auswählen, bevor Sie eine Antwort erhalten können.
dmckee --- Ex-Moderator Kätzchen
Es ist eine sehr breite Frage, die mindestens 3 Ingenieurdisziplinen und viele Farbtöne dazwischen abdeckt.
Jodrell
FWIW, Sie könnten daran interessiert sein, mit einer Mikrocontroller-Plattform wie Arduino (~ $ 30) arduino.cc zu spielen .
Dampfer25

Antworten:

47

Das meiste, worüber Sie sprechen, sind eingebettete Systeme, bei denen C ein Luxus ist, der oft nicht verfügbar ist. Sie haben keine Software im herkömmlichen Sinne. Meistens ist die Software in C, Assembly oder sogar Maschinencode geschrieben. C und ASM erfordern, dass Compiler geschrieben werden, um sie für diese Plattform zu verwenden. Maschinencode wird als Binär ohne Compiler geschrieben.

Ihre Kaffeekanne und die meisten einfachen Systeme wie dieses tragen kein Betriebssystem. Sie werden einfach von einer Startadresse im Speicher geladen und Sie geben Ihren Code dort ein. Oft wird der "Code" dieser Systeme in EEPROMs gebrannt, die als Festplatte des Systems dienen. Versauen Sie den Code nach dem Verbrennen der Proms, werfen Sie die Chips weg, brennen Sie den Code auf dem Chip zurück und beginnen Sie von vorne. Es gibt neuere FPGA-Chips, mit denen High-End-Geräte das Testen, Bereitstellen usw. vereinfachen, aber sie sind dasselbe.

Coca-Cola-Maschinen, Router usw. verwenden normalerweise ein Echtzeit-Betriebssystem wie QNX, EMBOS oder manchmal RTlinux, wenn Sie Glück haben. Die meisten davon sind proprietäre Betriebssysteme, die Sie für viel Geld lizenzieren, aber sie haben C-Compiler, Treiber für die Arbeit mit Hardware usw.

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
quelle
35
Personen, die binär codieren? Assembler sind so einfach zu schreiben, dass ich das kaum glauben kann. Hast du eine Quelle dafür? Diese Antwort erweckt auch den falschen Eindruck, dass alle Systeme einen Mikroprozessor enthalten, auf dem Code ausgeführt wird. Obwohl dies immer beliebter wird, da Mikrocontroller und EEPROM (die das Debuggen und Aktualisieren erleichtern) billiger werden, lohnt es sich immer noch nicht für sehr billige Systeme oder Systeme, die sich in den letzten 20 Jahren nicht wesentlich verändert haben. Zum Beispiel einige Digitaluhren.
BlueRaja - Danny Pflughoeft
6
Dies wird einfach zu stark angegeben. Sie müssen den Compiler nicht auf dem Ziel hosten. Cross-Compiler sind in der eingebetteten Programmierung sehr verbreitet.
dmckee --- Ex-Moderator Kätzchen
12
Eine Koksmaschine mit QNX? WTF - das ist eine andere Art von Cola! Und ja, es gibt einen C-Compiler für jede einzelne Plattform, die derzeit in großen Mengen ausgeliefert wird. Niemand will eine Versammlung schreiben, das Fehlen von C wäre ein großes Handicap. (Einige Compiler sind
natürlich
8
Außerdem kann das EEPROM per Definition mehr als 100000 Mal umgeschrieben werden. Einmalige Erinnerungen sind veraltet. Alle gängigen Mikrocontroller verfügen heute über Flash. FPGA ist ein völlig anderer Markt als Low-End-MCUs. Sie haben keine Ahnung, wovon Sie sprechen.
Potatoswatter
7
Ich habe einen Freund, der an Automaten arbeitet, die ziemlich komplex sind. Sie verfügen über Mobilfunkgeräte, überwachen den Lagerbestand, verfolgen die Temperatur, melden Finanzzahlen und senden HTTP-Anrufe an Server zurück, um all diese Daten zu aggregieren, sodass Sie sie auf allen Ihren Computern verfolgen können. Und ja, diese Maschinenmarken verwenden ein eingebettetes Betriebssystem. Ich denke, sie verwenden RTLinux mit C. Also ja, selbst der niedrige Verkaufsautomat wird komplex genug, um ein eingebettetes Betriebssystem zu rechtfertigen.
Chubbsondubs
29

Sie verwenden Mikrocontroller, der 8051 ist der Klassiker. Dies sind 8-Bit- oder 16-Bit-Kerne, sie haben selten ein Betriebssystem. Der Programmierer schreibt den Code, um die integrierten Peripheriegeräte zu initialisieren und die Interrupt-Handler zu implementieren. Die verwendeten Sprachen sind Assembly und C. Für schwierige Debugging-Jobs ist ein In-Circuit-Emulator erforderlich.

Darüber hinaus gibt es viel wachsenden Raum mit eingebetteten 32-Bit-Kernen (ARM ist der 100-Pfund-Gorilla), die eine eingebettete Version von Linux und / oder der Java-JVM booten.

Hans Passant
quelle
5
Das ist ein ziemlich kleiner Gorilla, aber ich denke, dass Leistungsbeschränkungen bei eingebetteten Menschenaffen ziemlich wichtig sind;)
Piskvor verließ das Gebäude am
Danke dir! Ihre Antwort war nützlich für mich und ich habe Ihnen eine positive Bewertung gegeben.
Josh Leitzel
ARM-Chips sind ebenfalls im unteren Preissegment ... mit <1 USD-Preisen und 2 x 2 mm Grundfläche.
Domen
24

Dies sind eingebettete Systeme , die mit einer sehr einfachen Sprache wie C oder Assembly programmiert werden. Im Allgemeinen läuft ein solches System ohne Betriebssystem, obwohl einige neuere "Alltagsmaschinen" wie Blue-Ray-DVD-Player und WLAN-Router ihren Code auf einem Unix-basierten Betriebssystem ausführen.


Aktualisieren

In Anlehnung an andere haben viele moderne eingebettete Systeme auch eine Art Fenster. Das hängt von der Anwendung ab. Außerdem gibt es in vielen Bereichen den Trend, auf einer leistungsfähigeren Plattform mit einem Betriebssystem ausgeführt zu werden, um Fälle wie Blue-Ray-Player zu behandeln, die Java ausführen müssen, und andere Fälle, in denen der Endbenutzer mehr Funktionalität wünscht.

Justin Ethier
quelle
Zur Verdeutlichung verwendet Bluray Java.
Andrew Marshall
6
Vielleicht, aber die tatsächlichen Spieler laufen unter Linux und sind in C / C ++ geschrieben
Justin Ethier
Registrierkassen und Zapfsäulen und dergleichen liefen dos (einige Marken), leider laufen einige von ihnen jetzt Fenster (Lebensmittelgeschäft oder andere Self-Checkout-Linien). Der Wunsch nach Fernsehsendungen, die Sie anstoßen, während Sie Ihr Benzin pumpen, und Quatsch auf dem Bildschirm zu tanzen, wenn dies nicht der Fall ist, hat zu mehr Leistung geführt. Ebenso die Koks- und Wassermaschinen mit dem zweiachsigen Greifer.
old_timer
@ Justin, na ja, natürlich muss Java auf etwas sitzen, um zu funktionieren. Mein Punkt war, dass es eine so hohe Sprache (vergleichsweise) wie Java verwendet.
Andrew Marshall
@ Andrew: Und auf welchem ​​Betriebssystem läuft der Java-Interpreter im Blue Ray? Und in welcher Sprache ist das Betriebssystem geschrieben?
Gunther Piez
18

Lassen Sie uns über den Prozessor auf Ihrem Desktop nachdenken. Alles, was es tut, ist Maschinenanweisungen auszuführen und sich nicht wirklich um "Betriebssysteme" oder "Programme" zu kümmern.

Sie schalten Ihren Computer ein, der Prozessor zeigt auf die erste Anweisung und die Ausführung beginnt.

Auf Ihrem Desktop wird das "Betriebssystem" ausgeführt. Es gibt jedoch keinen Grund, warum der Prozessor keine von Ihnen ausgewählten Anweisungen ausführen könnte. (Dies ist möglicherweise nicht sehr nützlich, da Sie weiterhin Ergebnisse auf dem Bildschirm ausgeben möchten und diese Funktionalität im Betriebssystem vorhanden ist.) Zur gleichen Zeit, wenn Ihre Maschinenanweisungen aus den richtigen Opcodes bestanden, damit der Prozessor ausgeben würde Umso besser ist die richtige Signalfolge, um ein Bild auf den Monitor zu malen. Kein Betriebssystem erforderlich.

Desktops tun so viel Material , dass wir in der Regel die Abstraktion eines OS erfordern. Im Kern führt der Prozessor jedoch nur Anweisungen aus.

Gleiches gilt für den Prozessor in Koks- und Kaffeemaschinen. Alles was es tut, ist Anweisungen auszuführen.

Nun, Stück für Stück Maschinenanweisungen zu schreiben, ist mühsam. Genau wie bei Desktops schreiben wir normalerweise Code in C, der dann in Maschinencode kompiliert wird. Dieser Maschinencode wird auf den eingebetteten Prozessor geladen und ausgeführt.

Eingebettete Systeme leisten so wenig, dass sie keine vollständigen Betriebssysteme benötigen. Ein Mikrocontroller verfügt möglicherweise über 8 oder 16 Pins auf dem Chip - im Vergleich zu vielen Pins in Ihrem normalen CPU-Sockel.

Der Workflow besteht also darin, Code zu schreiben (z. B. in C) und ihn auf Ihrem Desktop-Computer zu kompilieren. Dieser Compiler generiert Maschinencode für den eingebetteten Chip. Dann wird dieser Code auf den Mikroprozessor geladen (und Sie benötigen dazu spezielle Hardware). Dann versorgen Sie den Chip mit Strom und er beginnt mit der Ausführung von Anweisungen. Einfach!

Poundifdef
quelle
2
Ich danke dir sehr! Wenn ich eine andere beste Antwort hätte wählen können, wäre es deine gewesen. Ich fand es sehr nützlich. +1
Josh Leitzel
Moderne Prozessoren sind überraschend besorgt über Betriebssysteme. Sie bieten Funktionen wie Speicherverwaltungseinheiten , privilegierte Anweisungen und Modi sowie Hardwarevirtualisierung . Moderne Betriebssysteme hängen von einigen dieser Funktionen ab. Das ist der Grund, warum Sie Linux auf kleinen Mikrocontrollern nicht ( einfach ) ausführen können.
Mira Weller
12

Viele Geräte, die eine bestimmte Funktion ausführen, enthalten keinen "Code". Sie erfüllen ihre Funktionen über die Eigenschaften ihrer elektronischen Komponenten. Fortgeschrittenere Systeme, die viele verschiedene Funktionen ausführen können oder leicht aufrüstbar sein müssen, enthalten einen Mikrocontroller und eine Art "Betriebssystem". Da diese noch einige Einschränkungen in ihrer Funktionalität haben, wird das Betriebssystem einfach und speziell entwickelt. Das Gerät wird noch weiter fortgeschritten und enthält etwas Ähnliches wie einen Computer. Es wird ein komplizierteres Betriebssystem haben, das mit verschiedenen Teilen des Systems kommunizieren kann. Schließlich erreichen Sie Geräte wie Smartphones, die ein vollständiges Betriebssystem enthalten, auf dem Code auf Benutzerebene ausgeführt werden kann und der viel mehr Benutzereingaben enthält als einfachere Geräte. Jedoch, Selbst moderne Prozessoren sind im Wesentlichen sehr große Stromkreise. Jeder Befehl, den die CPU erkennt, bewirkt, dass eine andere Schaltung verwendet wird, um diese Funktion auszuführen.

Hier sind einige Wikipedia-Seiten, die Sie interessieren könnten:

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
quelle
Das ist falsch. Ein Hauptfaktor für die Kosten von kostengünstigen Chips ist das Gehäuse, das das Silizium trägt. Aus diesem Grund ist es billiger, diskrete Logik durch einen Mikrocontroller zu ersetzen, wenn Sie ein paar Dutzend Gates oder so erreichen ... und ein Dutzend Gates machen nicht viel. Die Allgegenwart der MCU hat die Kosten für diskrete Gates in die Höhe getrieben und das Gleichgewicht verändert. Außerdem führen die meisten Low-End-MCUs kein Betriebssystem aus.
Potatoswatter
7

Das ist eine sehr breite Frage und hängt stark von der Maschine ab. Ich kann nur vermuten, dass die meisten dieser Verkaufsautomaten von Mikrocontrollern gesteuert werden (8051, PIC, ARM7, um nur einige der am häufigsten verwendeten zu nennen) und selten ein Betriebssystem haben, und wenn überhaupt, wäre es eine Art RTOS, wie z FreeRTOS .

Komplexere Computer wie DVD / Blu-Ray-Player oder Mobiltelefone laufen auf hoch entwickelten Plattformen wie OMAP4 . Normalerweise läuft ein Unix-Betriebssystem auf ihnen.

Thiago Cardoso
quelle
Vielen Dank für Ihre Antwort! +1
Josh Leitzel
7

Low-End-Mikrocontroller in alltäglichen Geräten führen normalerweise kein Betriebssystem aus. Sie werden aufgrund ihrer geringen Kosten ausgewählt, und die Hauptfaktoren, die diese Kosten verursachen, sind die Anzahl der Pins auf dem Chip (von einem Dutzend bis zu ein paar hundert) und die Menge an Speicher im Inneren (von ein paar Kilobyte bis zu einem Megabyte-ROM, von einigen wenigen) Bytes bis hundert Kilobyte RAM).

Da Feature Creep seine Magie entfaltet, kann es vorkommen, dass eine Mikrowelle Multitasking ausführen muss. In diesem Fall ruft der Programmierer den Kurs seines Betriebssystems ab und implementiert bei Bedarf die Weitergabe von Nachrichten, die Planung von Aufgaben, asynchrone E / A usw.!

Aus Gründen der Zweckmäßigkeit, Einfachheit, Codegröße usw. werden Funktionen in der Regel rudimentär ausgeführt. Oft hängt es davon ab, wie Sie das Programm analysieren, um allgemeine Betriebssystemfunktionen in aufgabenspezifischem Code zu finden. Aber es ist ein langer Weg von einem fest codierten Taskplaner zu einem Betriebssystem, und wenn Sie nur wenige Kilobyte zum Arbeiten haben, ist ein Standardbetriebssystem nicht die Lösung.

Werfen Sie einen Blick auf DigiKey, eine beliebte Website zur Auswahl elektronischer Teile, um mehr über Low-End-MCUs zu erfahren. Hier finden Sie Informationen zu einer sehr günstigen MCU mit LCD-Controller, wie sie beispielsweise in einer Kaffeemaschine zu finden ist. Es ist einfach genug, das Programmierhandbuch und alles zu bekommen.

Potatoswatter
quelle
5

Die Aufgabe eines Betriebssystems besteht darin, einen gemeinsamen Zugriff auf Ressourcen bereitzustellen - CPU-Ausführungszeit, RAM, E / A usw. Bei den meisten einfachen eingebetteten Systemen auf Mikrocontroller-Basis wird jeweils nur ein Programm ausgeführt, und sie greifen auf diese Ressourcen zu (und verwalten sie selbst) Daher benötigen sie kein Betriebssystem.

Eingebettete Systeme werden normalerweise in C und manchmal in der Baugruppe für extremes Timing oder Speicheroptimierung programmiert. Bei einigen eingebetteten Compilern können Sie Assemblys in einer höheren Sprache verteilen.

Nick Forge
quelle
4

Ich bin kürzlich auf einen Zigarettenautomaten gestoßen, auf dem Ubuntu lief (der Automat wurde neu gestartet, sodass ich das Logo sehen konnte).

Ryyst
quelle
1

Wenn Sie nach allgemeinen Informationen suchen, suchen Sie nach Dingen wie "eingebettete Systeme", "soc" (System-on-a-Chip). Ich würde sagen, ein großer Teil dieser Gerätetypen wird in einfachen Sprachen wie C ausgeführt.

Unterhaltsame Tatsache: Java wurde ursprünglich als Lösung für die Programmierung eingebetteter Systeme konzipiert: http://en.wikipedia.org/wiki/Oak_(programming_language )

Travis Webb
quelle
Danke, ich werde diese sicher weiter erforschen! +1
Josh Leitzel
1

Die meisten Kioske, Register, Drive-Thru-Bildschirme und sogar High-End-Kaffeemaschinen und Mikrowellen laufen unter Windows XP oder Linux, wie die Maschinen der "Jura Impressa" -Serie. Sie können SSH in sie und Kaffee kochen.

Hier ist ein Github-Skript für einen Cron-Job in einer Kaffeemaschine: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

Die meisten Router, neuere Öfen, neuere Kühlschränke, Autos, DVD-Player, verschiedene Elektronikgeräte, neuere Produkte für die Hausautomation, einschließlich Glühbirnen, verwenden eine Version von ARM Linux oder Embedded Linux.

Die meisten billigeren Geräte unter 20 US-Dollar, wenn sie neuer sind, laufen auf dem ESP8266 oder einem ähnlichen Gerät (können LUA oder einen reduzierten Node-Server für 2 US-Dollar in großen Mengen ausführen - wahnsinnig billig).

http://nodemcu.com/index_en.html

Die Verwendung von FPGA und eingebetteten Systemen wie 8051, Z80 oder anderen eingebetteten Geräten wie PICC, AVR und Arduino wird bald durch All-in-One / SoC-Systeme (System on Chip) wie das ESP8266 ersetzt. Sie sind einfach zu einfach zu programmieren und ein komplettes System auf einem Chip, auf dem ein eigener Webserver ausgeführt wird. Sie schalten sie einfach ein, laden Ihren Quellcode hoch und haben einen Netzwerkserver für 2 US-Dollar.

Ich bin mit der Codierung von PICC, AVR und 8051 aufgewachsen, und ich bin traurig, dass sie verschwunden sind, aber ich habe seit Jahren nichts anderes als ESP8266es angerührt, weil sie 1/10 des Preises kosten und um eine Größenordnung einfacher zu bearbeiten sind . Sie können sie auf Entwicklungsboards mit Akkus und explodierten Pin-Layouts für 5 US-Dollar bei eBay oder 10 US-Dollar bei Adafruit kaufen.

Nick Steele
quelle
-2

Ich habe von einem Ingenieur gehört, dass die Siemens Light-Rail Commuter Trains mit 386 fahren.

luser droog
quelle