Fachthema
Wie programmiert man Embedded Systeme?
Eingebettete Systeme verrichten ihren Dienst verlässlich im Verborgenen. Sie sind so vielfältig wie ihre Anwendungen in den unterschiedlichsten Branchen. Erfahren Sie mehr zur Programmierung von Embedded Systems in diesem Blogartikel!

Was ist ein Embedded System?
Ein Embedded System ist ein programmierbares elektronisches System, das für einen ganz bestimmten Zweck in den verschiedensten Branchen (von der Automobilindustrie bis zur Unterhaltungselektronik) eingesetzt wird. Denken Sie beispielsweise an einen Drucker in Ihrem Büro. Innerhalb dieses Druckers arbeiten ein oder mehrere Mikroprozessoren mit einem begrenzten Umfang an Speicher und Peripherie-Elektronik, um Daten zu übernehmen und diese auf Papier auszudrucken. Die Aufgaben dieses Embedded Systems sind vielfältig:
- Kommunikation mit dem PC über Netzwerk, USB o. Ä.
- Reaktion auf Tasteneingaben am Drucker
- Rückmeldung am Druckerdisplay
- Steuerung der gesamten Druckermechanik (Motoren, Sensoren usw.)
- Kontrolle und Überwachung des Gesamtsystems
Je nach gewünschter Druckerleistung (Farbe, Auflösung, Seiten/Minute) müssen diese Aufgaben mehr oder weniger schnell ausgeführt werden. Dafür gibt es, wie auch bei PCs, Prozessoren unterschiedlicher Leistungsklassen. Bekannte Prozessorfamilien sind ARM, MIPS, Coldfire, 8051 und auch die aus der PC-Welt bekannte Intel x86-Baureihe
Wie entwickelte sich die Programmierung von Embedded Systems?
Früher erfolgte die Programmierung der Embedded Systeme direkt in Assembler, der Maschinensprache des Prozessors. Speicher war damals noch teuer und sehr beschränkt. Die Assembler-Programmierung war in diesem Umfang noch handhabbar und man konnte die Programme bis ins letzte Bit optimieren. Das Lesen, Analysieren und Warten der Programme war aber nur mit hohem Aufwand machbar, weshalb dieser Weg mit wachsendem Funktionsumfang nicht mehr praktikabel war. Die Komplexität zigtausender Zeilen Assemblercode führte zum Einsatz neuer „höherer“ Programmiersprachen wie C, C++ oder Java - auch in der “Embedded-Welt”. Höhere Programmiersprachen und Programmbibliotheken erlauben die schnellere Realisierung von Embedded Programmen.

Auf Neuerungen in der Embedded-System-Programmierung folgten die Betriebssysteme
Durch den Fortschritt bei der Programmierung von Embedded Systemen kann sich ein Druckerhersteller z. B. eine Programmbibliothek für seine Displays vorbereiten und diese dann einfach in unterschiedlichen Geräten wiederverwenden. Aufgrund dieser praktischen Vorteile zogen mit der Zeit auch die Betriebssysteme in die Welt der Embedded Systeme ein. Wie in einem PC übernehmen diese fundamentale Aufgaben im System, um
- Daten über Netzwerke auszutauschen,
- Speicher zu verwalten oder
- auf Eingaben zu reagieren.
Die Embedded Betriebssysteme unterscheiden sich in vielen Bereichen von den bekannten PC-Betriebssystemen, sind meistens viel schlanker und reagieren genau vorhersehbar auf Ereignisse (echtzeitfähig). Bekannte Vertreter von Embedded Betriebssystemen sind VxWorks, Nucleus, QNX aber auch verschiedene Linux-Varianten. Neuerdings fassen auch bekannte Systeme wie Windows oder Android im Embedded-Bereich Fuß.
Programmiersprachen – ein kleiner Exkurs
Assemblersprache
Assemblersprache, kurz auch Assembler genannt (to assemble = ‚montieren‘), ist eine Programmiersprache, die auf den Befehlsvorrat eines bestimmten Computertyps (= Prozessorarchitektur) ausgerichtet ist. Man bezeichnet sie daher als maschinenorientierte Programmiersprache und – als Nachfolger der direkten Programmierung mit Zahlencodes – als Programmiersprache der zweiten Generation. Anstelle eines Binärcodes der Maschinensprache können Befehle und deren Operanden durch
- leichter verständliche, mnemonische Symbole in Textform (z. B. „MOVE“),
- Operanden, z. T. als symbolische Adresse (z. B. „PLZ“),
notiert und dargestellt werden. Der Quelltext eines Assemblerprogramms wird mit Hilfe einer Übersetzungssoftware in Maschinencode übersetzt. Dagegen übersetzt in höheren Programmiersprachen ein sogenannter Compiler abstraktere Befehle in den Maschinencode der gegebenen Zielarchitektur - oder in eine Zwischensprache.
höhere Programmiersprachen
Eine höhere Programmiersprache ist eine Programmiersprache zur Abfassung eines Computerprogramms, die in Abstraktion und Komplexität von der Ebene der Maschinensprache deutlich abweicht. Die Grenze zwischen einfachen und höheren Programmiersprachen ist nicht eindeutig definiert. Mindestmerkmal ist aber, dass die Befehle höherer Programmiersprachen nicht unmittelbar von Mikroprozessoren verstanden und ausgeführt werden können. Befehle müssen durch Interpreter oder Compiler in Maschinensprache übersetzt werden. Oft sind auch umfangreiche Betriebssysteme zwischengeschaltet.
Vereinfacht kann man sagen, dass höhere Programmiersprachen (oder auch "Programmiersprachen der dritten Generation") mehr und komplexere logische Zusammenhänge kürzer ausdrücken. Durch automatisierte Prozesse werden diese anschließend auf Maschinencode heruntergebrochen. Die Lesbarkeit des Programmtextes wird so erhöht und die Anzahl der expliziten rekursiven Aufgaben verringert.
Einige Beispiele für höhere Programmiersprachen:
- Java
- C++
- JavaScript
- C#
- Python
- PHP
- Ruby
Haben Sie noch offene Fragen?
Gibt es noch Unklarheiten, haben Sie noch offene Fragen oder sind Sie an unseren Leistungen interessiert? Dann kontaktieren Sie unsere Experten und erfahren Sie mehr zur Programmierung von Embedded Systems!