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.
quelle
Antworten:
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
quelle
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.
quelle
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.
quelle
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!
quelle
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
quelle
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.
quelle
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.
quelle
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.
quelle
Ich bin kürzlich auf einen Zigarettenautomaten gestoßen, auf dem Ubuntu lief (der Automat wurde neu gestartet, sodass ich das Logo sehen konnte).
quelle
Schauen Sie sich das Embedded Systems Magazine und den Circuit Cellar an
quelle
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 )
quelle
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.
quelle
Ich habe von einem Ingenieur gehört, dass die Siemens Light-Rail Commuter Trains mit 386 fahren.
quelle