mini|Typisches eingebettetes System auf einer Einsteckkarte mit Mikroprozessor (CPU)In der Regel ein Mikrocontroller (MPU), vermehrt aber auch Mikroprozessoren (CPU) mit externem Halbleiterspeicher, vgl. die von-Neumann-Architektur., Halbleiterspeicher (DRAM und Fest als MicroSD-Karte), Leistungsversorgung und externen Schnittstellen (Pins).

Ein eingebettetes System (auch ) ist ein meist kompakter Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Dabei übernimmt der Rechner entweder Überwachungs-, Steuerungs- oder Regelfunktionen oder ist für eine Form der Daten- und/oder Signalverarbeitung zuständig, beispielsweise beim Ver- bzw. Entschlüsseln, Codieren bzw. Decodieren oder Filtern. Weitere verwandte Bezeichnungen und/oder Geräte sind System-on-a-Chip (SoC) und die Controller. Die Systeme bzw. Geräte werden als Teil des Embedded Software Engineering entwickelt.

Eingebettete Systeme verrichten – weitestgehend unsichtbar für den Benutzer – ihren Dienst in einer Vielzahl von Anwendungsbereichen und Geräten, beispielsweise in einer Vielzahl von Fahrzeugen (Kraftfahrzeugen oder Flugzeugen), Haushaltsgeräten wie Waschmaschinen oder Kühlschränken, Fernsehgeräten, aber auch Mobiltelefonen oder allgemein in Geräten der Unterhaltungselektronik.

Im Fall von Gesamtsystemen handelt es sich dabei meist um eine Vernetzung einer Vielzahl von ansonsten autonomen eingebetteten Einzelsystemen, beispielsweise die verschiedenen Steuergeräte aus der Automobilelektronik.

Oft werden eingebettete Systeme speziell an eine Aufgabe angepasst. Aus Kostengründen wird eine optimierte gemischte Hardware-Software-Implementierung gewählt. Dabei vereint eine solche Konstruktion die große Flexibilität von Software mit der Leistungsfähigkeit der Hardware. Die Software dient dabei sowohl zur Steuerung des Systems selbst als auch zur Interaktion des Systems mit der Außenwelt über definierte Schnittstellen oder Kommunikationsprotokolle wie z. B. CAN-Bus, ZigBee für drahtlose Kommunikation oder TCP/IP über Ethernet.

Entwicklungsgeschichte

mini|Blick auf den Missile Guidance Computer einer Minuteman I ICBM aus den 1960er Jahren. Die Geräte wurden von Autonetics (eine Division der North American Aviation) entworfen bzw. entwickelt und gebaut. Foto von 2016 am Computer History Museum (CHM). Der erste prominente Einsatz eines eingebetteten Systems war der des Apollo-Guidance-Computers, der von Charles Draper zusammen mit dem MIT Instrumentation Laboratory entwickelt wurde. Jeder Flug auf den Mond hatte zwei dieser Systeme dabei (Redundanz), die zur Steuerung verwendet wurden. Das Inertial Guidance System wurde sowohl im Kommandomodul als auch in der Mondlandefähre (Lunar Excursion Module) verwendet. Zu Beginn des Apollo-Programms wurde dieses System als eine der riskantesten Komponenten des Projektes angesehen.

Die ersten eingebetteten Systeme wurden aber schon vorher in der Minuteman-Interkontinentalrakete (ICBM) eingesetzt und in Serie produziert. Die Anwendung war ein Wege-Such-System, das der Rakete nach einmaliger Programmierung ein unabhängiges Manövrieren ermöglichte. Durch den Preisverfall öffneten sich die verwendeten integrierten Schaltungen (ICs) allmählich einem größeren Kreis von Anwendungen und eröffneten neue elektronische Möglichkeiten beim Bau von Steuergeräten. Die entscheidende Eigenschaft des Minuteman-Computers war, dass der Weg-Finde-Algorithmus später programmiert werden konnte, wodurch sich die Rakete wesentlich präziser einsetzen ließ. Ein weiterer Vorteil bestand in der Selbsttestfunktion der Rakete zur Statusabfrage sowie darin, dass man zugunsten des Gewichtes auf größere Mengen von Kabeln verzichten konnte. Charakteristik mini|Embedded-PC Simatic Microbox PC 427B von Siemens, auf dem das Betriebssystem Microsoft Windows XP Embedded installiert ist. (2008)Eingebettete Systeme können in Einzelfällen auf ähnlicher Hardware wie Arbeitsplatzcomputer basieren (Embedded-PCs). Typischerweise unterliegen sie jedoch stark einschränkenden Randbedingungen: minimale Kosten, geringer Platz-, Energie- und Speicherverbrauch. Einzelne Komponenten wie Prozessor und Arbeitsspeicher basieren oft auf Weiterentwicklungen älterer Komponenten, was die langfristige Einsetzbarkeit und Ersatzteilbeschaffung erleichtert. „Moderne“ eingebettete Systeme basieren häufig auf Prozessorplattformen, die mit der PC-Welt wenig gemeinsam haben, aber in Bezug auf die Peripheriemodule hochintegriert sind und durch moderne Stromspartechniken deutlich weniger Energie verbrauchen.

Bei vielen Anwendungen kann die Verwendung einer älteren Prozessorarchitektur dazu beitragen, Kosten zu senken. So sind die Architekturen der MCS-51-, PICmicro- oder Z80-Serie trotz ihres Alters und bekannter Schwächen immer noch eine beliebte Basis für eingebettete Systeme. Die Wiederverwendung von Programmcodes und Werkzeugen sowie die Scheu vor vollständigen Re-designs „ohne Not“ sind hierbei neben den reinen Materialkosten ebenfalls nicht zu unterschätzende Randfaktoren.

In einem eingebetteten System muss die Software häufig Echtzeitanforderungen genügen. In der Regel existieren, verglichen mit PC-Hardware, nur stark reduzierte Ressourcen, zumeist ohne Festplatte, häufig ohne Betriebssystem, Tastatur oder Bildschirm. Ein ROM- oder Flash-Chip ersetzt mechanische Speicherkomponenten wie eine Festplatte, stromsparende Prozessoren kommen ohne Lüfter aus, denn bewegliche Teile bedeuten Verschleiß und Fehleranfälligkeit. Wenn überhaupt, dann gibt es meistens nur ein Tastenfeld, und die Ausgabe wird – soweit vorgesehen – durch ein LCD realisiert.

Die Software auf einem solchen Gerät wird Firmware (FW) genannt. Sie befindet sich gewöhnlich auf einem ROM (oder ähnlichem Halbleiterspeicher), immer häufiger jedoch auf Flash-Speicher. Im Falle eines Flash-Speichers besteht die Möglichkeit eines Firmware-Updates, ohne dass der Chip ausgewechselt werden muss. Ist nur ein ROM vorhanden, muss zumeist der gesamte Chip ausgewechselt werden, manchmal auch die gesamte Schaltung.

Firmware Im Wesentlichen besteht die Firmware, also der lauffähige Programmcode (Executable) für ein embedded System, aus drei Komponenten:

Bootloader: Sorgt für das Laden des Betriebssystems und der Applikationssoftware. Weiter bietet dieser die Möglichkeit, Betriebssystem und Applikationssoftware im Flash-Speicher zu aktualisieren. Dies kann entweder über eine serielle Schnittstelle (RS232) oder über Ethernet und IP erfolgen. Bekannte Bootloader für eingebettete Systeme sind RedBoot oder U-Boot. Betriebssystem bzw. Echtzeitbetriebssystem: Dieser Softwareteil sorgt unter anderem für das Multitasking, Speicher und Dateiverwaltung (zum Beispiel JFFS2) sowie für IP-Dienste wie TFTP, HTTP, SNMP und Telnet. Applikationssoftware: Dieser Teil enthält die anwendungsspezifische Software. Diese wird auch als Anwendungssoftware bezeichnet.

Bei kleinen eingebetteten Systemen können die drei Softwareteile zusammengefasst sein. Bei größeren Systemen können sogar mehrere Firmwares verteilt und genutzt werden.

Plattformen Eingebettete Systeme werden mittels vieler verschiedener Mikroprozessor- oder Mikrocontroller-Architekturen (8051, Arm, AVR, TI MSP430, MIPS, PowerPC, 68000/Coldfire, Intel x86, 68HC12, C167, Renesas M16C, H8S und diverser anderer 8/16/32-Bit-CPUs) realisiert.

Eine Untergruppe der Architekturen sind die Prozessorfamilien (beispielsweise 8051, AVR, PIC16, ARM7, PowerPC 5xx, MIPS 4k, AMD AU1000, Intel Pentium M), bei denen verschiedene Varianten mit denselben Entwicklungswerkzeugen und Debugger-Werkzeuge betrieben werden können. Unterschiede innerhalb einer Prozessorfamilie bestehen bei der Geschwindigkeit und vor allem der Ausstattung mit Speicher und Peripheriebausteinen.

Eine besonders flexible Plattform sind hochintegrierte FPGA-Bausteine (Field Programmable Gate Array), mit denen zum einen unterschiedliche CPU-Architekturen nachgebildet werden können (beispielsweise 68000 und PowerPC 405 auf einem Chip) und zum anderen auch gut parallele Rechenleistung ohne Prozessor – nur mittels dedizierter Logik – zur Verfügung gestellt werden kann. In realen Anwendungen werden oft beide Ansätze in einem FPGA als System-on-a-Chip (SoC) integriert. Zum Einsatz kommen hierbei als Prozessor sowohl fest verdrahtete Hardmakros wie die PowerPC-Kerne in verschiedenen Xilinx-Virtex-FPGAs als auch flexibel konfigurierbare Softcore-Prozessoren wie Alteras Nios II, Xilinx MicroBlaze, der Mico32 von Lattice oder auch IP-Cores eines Mikrocontrollers wie PICmicro oder die MCS-51-Baureihe.

Entwicklungsinfrastruktur

Entwicklungswerkzeuge Die Softwareumgebung zur Programmentwicklung, also Compiler, Assembler und Debugger (benötigen meist externe Hardware), wird in der Regel von verschiedenen Herstellern angeboten: Halbleiterhersteller, die die Mikrocontroller oder eingebetteten System herstellen und vermarkten Ingenieurdienstleister, die sich auf dieses Fachgebiet spezialisiert haben Manche Hersteller bieten auch System Design Kits an, die eine Prototypenplatine mit dem entsprechenden Prozessor zusammen mit einem Software Development Kit (SDK) und Dokumentation zu Hard- und Software enthalten.

Softwareentwicklung Die Softwareentwicklung für eingebettete Systeme unterscheidet sich grundsätzlich von der für Anwendungssoftware für PCs, da hierbei der Fokus auf den Möglichkeiten der elektronischen Ein-/Ausgabe liegt. Die Funktionen dafür sind hardwareabhängig und für jedes System spezifiziert, d. h. die Software wird mit der Computerhardware gepaart und ist in der Regel nicht übertragbar auf andere Systeme. Hier spielt auch das Konfigurationsmanagement eine übergeordnete Rolle.

Die Software für Embedded Systeme, also die Firmware, wird in der Regel über einen Cross-Compiler erzeugt. Dieser Compiler läuft auf dem Entwicklungssystem (Host-System), also normalerweise einer anderen Rechnerarchitektur als der des Zielsystems. Cross-Compiler sind dabei nicht auf einen bestimmten Prozessor begrenzt, sondern können Maschinencode für eine ganze Prozessorfamilie erzeugen, wie ARM7, PowerPC 8xx.

Die bevorzugte Programmiersprache für eingebettete System ist in der Regel C, aber auch C++ oder Java (siehe OSGi oder Embedded Java) finden Verwendung. Assemblersprache wird dann eingesetzt, wenn Gerätetreiber-Funktionen vor allem in Interrupts programmiert werden oder wenn das Betriebssystem selbst an eine neue Umgebung bzw. CPU angepasst werden muss. Oberhalb des Betriebssystems ist Assembler eher eine Randerscheinung, in Systemen ohne Betriebssystem (Bare Metal) und vor allem bei massiven Speicherrestriktionen kommt Assembler jedoch noch zur Anwendung.

Betriebssysteme

Bei „kleinen“ Systemen kommt häufig kein Betriebssystem zum Einsatz. Man spricht dann auch von einem Bare-Metal-System, welches nur laufzeitfähige Funktionen aufruft und ausführt. Wenn in eingebetteten Systemen ein Betriebssystem eingesetzt wird, handelt es sich meistens um darauf spezialisierte Betriebssysteme (Beispiele: QNX, VxWorks, Nucleus, OSEK, OS-9, RTEMS oder ECos). Auch eingebettete Varianten von Standardbetriebssystemen wie Linux (Embedded Linux), NetBSD oder Microsoft Windows (3.x, CE, XP Embedded, Automotive oder Windows Embedded POSReady 2009/POSReady 7) kommen zum Einsatz.

Oftmals haben Anwendungen weiche oder gar harte Echtzeitanforderungen. Hierfür müssen spezielle Echtzeitbetriebssysteme () oder Betriebssysteme mit entsprechend angepassten Kerneln verwendet werden.Jürgen Quade, Michael Mächtel: Moderne Realzeitsysteme kompakt: eine Einführung mit Embedded Linux. dpunkt-Verlag, Heidelberg 2012, ISBN 978-3-89864-830-1, S. 3–5, 157–173.

Testing