Einführung in die Embedded-Software Entwicklung

Was es mit der Entwicklung von Embedded-Software auf sich hat, welche Technologien zum Einsatz kommen und was dabei herauskommt - all das ist hier für Sie sinnvoll zusammengestellt.

Software-EntwicklungUPDATED ON November 16, 2021

Embedded Software (auf deutsch: eingebettete Software), die Technologie die intelligenten Maschinen mitteilt, wie sie sich verhalten und was sie tun sollen, ist mindestens genauso wichtig wie die alltags genutzten Anwendungsprogramme mit denen wir täglich interagieren. Außerdem gewinnt die Embedded-Software von Tag zu Tag an Bedeutung, da immer mehr Alltags- und Arbeitsgeräte auf solche Technologien angewiesen sind, um richtig zu funktionieren.

Autos, Fernsehgeräte, Staubsaugroboter, Industrieanlagen, Roboter in automatisierten Lagern und die in der Chirurgie eingesetzten Technologien funktionieren mithilfe von Embedded-Software (Systemen). Aber wer stellt Embedded-Software her? Und ähneln die verwendeten Methoden, Prozesse, Technologien, Werkzeuge und Programmiersprachen denen der Softwareentwicklungsteams, die Anwendungssoftware wie Websites und Apps erstellen?

In diesem Artikel erfahren Sie, was Embedded-Software ist, wo sie eingesetzt wird, wie sie entwickelt wird und welche Gemeinsamkeiten und Unterschiede es zu anderen Arten von Software gibt. Kurz gesagt, dies ist ein Leitfaden für Anfänger in Sachen Embedded-Software.

Können wir Ihnen bei Ihrem nächsten Embedded-Softwareprojekt helfen?

Bringen Sie Ihr nächstes IT-Projekt in Schwung!

Was ist Embedded-Software?

Nach Qian et al. ist Embedded-Software (Embedded-Systemsoftware) „eine anwendungsspezifische Software, die für die wiederholte Ausführung bestimmter Aufgaben ohne Benutzereingriff konzipiert ist. Mit Ausnahme des einfachen Reset-vorgangs wird von der Embedded-Software erwartet, dass sie, sobald das System geladen ist, für eine sehr lange Zeit von selbst läuft, ohne dass die Software, Schaden nimmt. Die Softwareentwickler müssen die Zuverlässigkeit, Sicherheit und Korrektheit der Embedded-Software garantieren.“

Einfach ausgedrückt besteht das Ziel der Embedded-Software in der Steuerung und/oder Verwaltung eines Hardwaregeräts, das für dieses spezielle Gerät entwickelt wurde, um die spezifischen Anforderungen zu optimieren und den Nutzen für den Benutzer zu maximieren.

Besonderheiten Embedded-Software

Ein Unterschied zu „normaler“ Software, also Anwendungssoftware, die auf einer Software (einem Betriebssystem) läuft, besteht darin, dass Embeded-Software ähnlich wie Firmware in Verbindung mit einer Hardwarekomponente entwickelt wird, und nur wenige oder keine Schnittstellen zur Außenwelt hat. Wir interagieren nicht mit Embedded Software, außer vielleicht beim Anpassen von Modi oder Einstellungen. Vielmehr sehen wir, wie das Hardware-Gerät, in welches sie integriert ist, funktioniert.

Embedded-Software vs Firmware

Es ist wichtig, den Unterschied zwischen Embedded-Software und Firmware kurz zu erklären. Auch wenn die Begriffe oft als Synonyme verwendet werden und es auch Überschneidungen gibt, ist Embedded Software von Firmware zu unterscheiden. Firmware wird in der Regel zeitgleich mit der Entwicklung der Hardwarekomponente erstellt und dient allgemeinen Zwecken des technischen Systems, während Embedded-Software oft erst zu einem späteren Zeitpunkt erstellt wird und gerätespezifischen Zwecken dient.

Da sich Embedded-Software in der Regel an die Hardwarekomponente anpasst und nicht umgekehrt, steht den Embedded-Software Entwicklern nur eine begrenzte Prozessor- und Rechenleistung zur Verfügung. Das bedeutet aber auch, dass die Entwickler der Embedded-Systemsoftware zumindest teilweise mit den physikalischen/mechanischen Gegebenheiten vertraut sein müssen.

Der wohl bedeutendste Unterschied zu Anwendungs-Software ist das Zeitverhalten von Embedded-Systemsoftware. Aufgrund der Interaktion zwischen Embedded-Software und Hardwarekomponenten muss das Embedded-Softwaresystem in Echtzeit arbeiten, um die zeitabhängigen Anwendungen des Geräts systemkonform ausführen zu können.

Dies ist z.B. bei der Ansteuerung von Motoren der Fall. Da deren zeitliche Abläufe nicht verändert werden können, muss die Embedded-Systemsoftware an das zeitliche Verhalten des technischen Systems (Sachsystem) angepasst werden.

Laut dem Bericht von Brinksma et al. aus dem Jahr 2021 ist die korrekte und sichere Implementierung von reaktiven oder Echtzeitsystemen wie Embedded-Software eine der großen Herausforderungen der IT. Denn mehr als je zuvor hat die moderne Gesellschaft eine unglaubliche Abhängigkeit von solchen Anwendungssystemen entwickelt. Dazu gehören unter anderem neben Embedded-Systemsoftware auch Prozessleitsysteme sowie Telematiksysteme wie Kommunikationsdienste.

Softwarequalität: Embedded-Software

Embedded-Software ist in vielen Geräten des Alltags integriert, aber nicht nur in der Kaffeemaschine im Büro oder dem WLAN-Router zu Hause. Embedded-Systemes sind auch in Flugzeugen, Maschinen und in der Automobiltechnik integriert und machen trotz begrenzter Prozessorkapazitäten und Rechenleistung einen großen Teil der Sicherheitstechnik aus (z.B. ABS oder Airbags). Das bedeutet, dass für den sicheren Betrieb solcher technischen Systeme (Autos, Flugzeuge, etc.) die Embedded-Software vor allem in Notsituationen sicher und zuverlässig funktionieren muss. Aufgrund der Abhängigkeit von solchen Geräten ist dies, wie bereits von „Briksma et. al“ beschrieben, eine der großen Herausforderungen der IT.

Um die Anforderungen an Sicherheit und Zuverlässigkeit zu erfüllen, darf es keine Kompromisse bei der Qualität der Embedded Software geben. Sie ist genauso wichtig wie die Qualität der Hardware, mit der sie zusammenarbeitet. Für den ernsten Einsatz gibt es natürlich gesetzliche Sicherheitsstandards, die für bestimmte Arten von Embedded-Software erfüllt werden müssen.

Um die funktionale Sicherheit der Geräte zu gewährleisten, lohnt es sich aber immer, ein Sicherheitskonzept für die Embedded-Systems zu erarbeiten. Nach der Erstellung eines Software-Sicherheitskonzeptes und einer erfolgreichen Sicherheitsanalyse der Software gilt es, die hohen Zuverlässigkeits- und Sicherheitsanforderungen zu erreichen. Die dabei zu beachtenden Merkmale sind häufig:

Um jedoch die funktionale Sicherheit der Geräte zu gewährleisten, sollten bei der Entwicklung von Embedded-Systems ausreichende Sicherheits- und Schutzmechanismen integriert werden. Die dabei zu berücksichtigenden Merkmale sind häufig:

  • Funktionalität
  • Zuverlässigkeit
  • Benutzbarkeit
  • Effizienz
  • Anpassungsfähigkeit
  • Übertragbarkeit

Am Ende eines Entwicklungsprozesses für Embedded-Software wird in der Regel die FIT-Rate (Failure in Time) überprüft, die besagt, wie viele Fehler pro eine Milliarde Betriebsstunden auftreten. Die Aufgabe der Embedded-Software Entwickler besteht dann darin, diese FIT-Rate zu minimieren und sie so weit wie möglich gegen Null zu bringen.

Embedded-Software Entwickler

Heutige Embedded-Software Entwickler brauchen keinen so breiten technischen Hintergrund wie die Embedded-Software Entwickler von vor 20 Jahren, als starke Programmierkenntnisse und ein Hintergrund in Maschinenbau oder Elektrotechnik Voraussetzung waren. Aber Kenntnisse außerhalb einzelner Programmiersprachen sind immer noch notwendig, um als Embedded-Software Entwickler erfolgreich zu sein. Embedded-Software Entwickler müssen die Hardware, mit der sie arbeiten verstehen, dennoch geht der Trend dahin, dass der Entwicklungsprozess vereinfacht wird, sodass Embedded-Software Entwickler immer weniger Hardwaretechnikkenntnisse brauchen werden.

Aufgrund des starken Hardwarebezugs von Embedded-Systemsoftware wird nach wie vor ein Grundverständnis von Physik und Mechanik erwartet. Darüber hinaus sind Kenntnisse im Maschinenbau, in der Elektrotechnik und in der Reglungstechnik auch heute noch von großem Wert. Folglich können neben Informatikern auch Elektrotechniker oder Mechatroniker oft in den Beruf des Embedded-Software Entwicklers einsteigen.

Da Embedded-Software heute in allen elektrischen und technischen Geräten zu finden ist, ist der Beruf des Embedded Software Entwicklers nicht nur ein vielversprechender, sondern auch ein sehr vielfältiger Job. Ob in IoT-, Umwelt- oder Industrie4.0-Projekten, ob in der Automobilindustrie oder im Consumer-Bereich: Embedded-Software Entwickler beschäftigen sich mit der Entwicklung und Optimierung von z.B. softwarebasierten Komponenten sowie mikroelektronischen/mechanischen Bauteilen und deren Embedded-Software, um Probleme aus den unterschiedlichsten Industrie- und Wirtschaftsbereichen zu lösen.

Lesen Sie unseren Beitrag über die Gehälter von Embedded Software Entwicklern!

Welche Programmiersprachen werden von Embedded-Software-Entwicklern am häufigsten verwendet?

Die bei der Entwicklung Embedded-Software verwendeten Programmiersprachen lassen sich in zwei Hauptgruppen unterteilen:

  • Bare-Metal-Programmiersprachen (Hardwarenah)
  • Andere Programmiersprachen, die für die Embedded-Software Entwicklung nützlich sind

Bare-Metal-Sprachen für die Embedded-Software Entwicklung

Bare-Metal-Software ist Code, der kein Betriebssystem benötigt, um ausgeführt zu werden, sondern direkt mit der Systemhardware arbeiten kann. Daher wird ein Großteil der Embedded-Software in diesen Sprachen programmiert:

  • C++
  • C
  • Assembler (nur eine Stufe von der Binärsprache entfernt)
  • Rust

Andere Programmiersprachen für die Embedded-Software Entwicklung

Diese Programmiersprachen werden allesamt für bestimmte Anwendungsszenarien in Embedded-Software verwendet, wobei sie für das reibungslose Funktionieren der Embedded-Softwaresysteme weniger wichtig sind:

  • Python
  • Ruby
  • C#

Es gibt auch zwei „Hardware-Design“-Sprachen, VHDL und Verilog, die Embedded-Software Entwickler manchmal zur Beschreibung von Signalen verwenden. Der in diesen Sprachen geschriebene Code wird auf einem FPGA (einem integrierten Schaltkreis) synthetisiert. Dadurch funktioniert er so wie gewünscht, da das Layout der tatsächlichen Schaltkreise programmierbar ist.

Embedded-Linux

Embedded-Linux ist natürlich keine Programmiersprache, sondern eine Reihe von Betriebssystemen, die für Betriebssystem benötigten Embedded-Devices entwickelt wurden. Sie laufen auf Prozessoren und sind eine Art Diätversion eines Linux-Betriebssystems, da diese nur die Funktionen enthalten, die das Embedded-System benötigt. Sie wird oft in Embedded-Softwareumgebungen verwendet, wie z. B.:

  • IoT-Geräten
  • Systeme, die grafische Benutzeroberflächen verwenden, wie z. B. non-Smartphone oder Tablet Touchscreens
  • Sprachgesteuerte Systeme, die mit natürlicher Sprachverarbeitung (NLP, Natural Language Processing) arbeiten

Wenn Sie mehr über die in der Entwicklung von Embedded-Software verwendeten Programmiersprachen erfahren möchten, lesen Sie diesen Beitrag des britischen Embedded-Software-Spezialisten BlueFruit.

Wir setzen Ihr nächstes Embedded-Softwareprojekt datenschutzkonform um.

Flexible Modelle für Ihre Bedürfnisse!

Die Besonderheiten der Embedded-Software Entwicklung

Der Entwicklungsprozess für Embedded-Software ähnelt zwar immer mehr der Entwicklung von Standardsoftware, aber es gibt immer noch eine ganze Reihe von Unterschieden.

Können agile Frameworks bei der Embedded-Software Entwicklung eingesetzt werden?

Ein Großteil der Anwendungssoftware wird von Softwareentwicklungsteams entwickelt, die nach agilen Methoden wie Scrum, Extreme Programming (XP), Adaptive Software Development usw. arbeiten. Folgt der Entwicklungsprozess für Embedded-Software denselben agilen Frameworks oder hat er seine eigenen spezifischen Methoden und Frameworks?

Die Methoden zur Entwicklung von Anwendungssoftware haben sich von linearen Prozessen wie dem Wasserfallverfahren hin zu agilen Ansätzen entwickelt. Dies ist darauf zurückzuführen, dass die durchschnittliche Softwareanwendung immer komplexer wird und eine schnelle Markteinführung zunehmend an Bedeutung gewinnt. Der iterative und schnelle Ansatz von Agile erwies sich als besser dafür geeignet und führte zudem zu einer besseren Softwarequalität als der lineare Ansatz von Wasserfall, bei dem sich insbesondere bei großen Projekten die Anforderungen verändern können, bevor ein „fertiges“ Produkt freigegeben wurde. Embedded-Software ist im Laufe der Jahre auch immer anspruchsvoller geworden, so dass die zusätzliche Komplexität die Schwächen eines linearen Waterfall-Softwareentwicklungsprozesses ebenso offenbart, wie dies einige Jahre zuvor bei Anwendungssoftware der Fall war. Deshalb kommen bei den meisten Entwicklungsprojekten für Embedded-Software nun auch agile Frameworks zum Einsatz.

Die Entwicklungsteams für Embedded-Software müssen jedoch agile Frameworks einsetzen, um einige der speziellen Herausforderungen zu berücksichtigen, denen sie begegnen.

Die Herausforderungen bei der Anpassung von agilen Frameworks an die Embedded-Software Entwicklung

  • Die Zielhardware ist nicht jederzeit für alle Ingenieure verfügbar.
  • Riesige Mengen an Konfigurationskombinationen, deren umfassende Berücksichtigung beim Testen viel Zeit in Anspruch nimmt.

Diese Herausforderungen hindern Entwicklungsteams für Embedded-Software daran, funktionsübergreifend zu arbeiten und verstärken die Abschottung untereinander:

  • Entwurf
  • Entwicklung
  • Test
  • Integration

Darüber hinaus erschweren sie die Automatisierung, die ein integraler Bestandteil von Agile- und CI-Prozessen (Continual improvement) ist, und verlängern die Vorlaufzeiten von Minuten und Stunden auf Tage und Wochen, was der agilen Anforderung kurzer Entwicklungszyklen zwischen Iterationen widerspricht.

Bedeutet das, dass der Lebenszyklus der Embedded Software-Entwicklung nicht mit den agilen Prozessen vereinbar ist? Glücklicherweise nicht. Neue Tools wie die im folgenden Video vorgestellten (in dem auch die Herausforderungen bei der Anwendung agiler Frameworks auf die Embedded-Software Entwicklung erläutert werden), tragen dazu bei, die Herausforderungen zu bewältigen, die bislang zu Schwierigkeiten mit agilen Prozessen geführt haben.

Hardwaresysteme können auf dem Computer eines Entwicklers virtuell nachgebildet werden und sind für das gesamte Team zugänglich, sodass Embedded-Software in Echtzeit und unabhängig vom Zielgerät entwickelt, getestet und ausgeführt werden kann. Es ist alles Software, genau wie bei der Entwicklung von Anwendungssoftware.

Embedded-Software Entwickler-Tools

Tools für die Embedded-Software Entwicklung sehen im Vergleich zu denen für die Entwicklung von Anwendungssoftware veraltet aus und fühlen sich auch so an. Bei üblicher Anwendungssoftware ist die Konkurrenz sehr groß , sodass die Entwickler hohe Ansprüche an ihre Software-Tools stellen können. Infolgedessen verwenden viele Entwickler von Embedded-Software nur für die Kompilierung und das Debugging spezielle Embedded-Software-Tools, während der Rest der Arbeit mit Standardtools wie z.B. Visual Studio Code erledigt wird.

Allerdings kommt jetzt eine neue Generation von Entwicklungswerkzeugen für Embedded-Software auf den Markt, die dieselben Standards erfüllen wie die Tools für die Anwendungsentwicklung, z. B. Tools zur Virtualisierung von Zielhardware-Systemen odrt zur Modernisierung der Prozesse. Da die Embedded-Software Entwickler eine schnell wachsende Softwareentwicklungskategorie ist, können wir davon ausgehen, dass sich dieser Trend fortsetzen wird.

Die Zukunft von Embedded-Software

Es zeigt sich, dass Embedded-Software heute in fast allen Sektoren und Branchen der Industrie und Wirtschaft eingesetzt wird. Die Technologie für Embedded-Software entwickelt sich rasend schnell weiter und ist wohl eine der wichtigsten Triebfedern für Innovationen bei intelligenten, leistungsstarken Geräten – die Anwendungsmöglichkeiten scheinen grenzenlos. IoT-Geräte (Internet of Things) sind einfache Hardware-Geräte die mit Embedded-Software, die dazu mit dem Internet verbunden sind. Laut dem in Fior Markets veröffentlichten Paper wird der weltweite Markt für Embedded-Software von bisher etwa 84 Milliarden Dollar (2020) bis 2027 voraussichtlich auf mehr als 137 Milliarden Dollar jährlich anwachsen.

Da Embedded-Software ein wesentlicher Bestandteil aktueller Innovationsthemen wie 5G, Internet of Things (IoT) oder der autonomen Produkte rund um Robotik und künstliche Intelligenz ist, wächst der Sektor exponentiell, angetrieben durch die steigenden Erwartungen der Endnutzer.

Wie Rob Ferris in einem im Juni 2021 veröffentlichten Beitrag der Feritech Global Limited beschrieb, werden Embedded-Softwaresysteme im Zusammenhang mit maschinellem Lernen die Grenzen der Fertigung und Produktion im nächsten Jahrzehnt sprengen.

K&C - Wir schaffen innovative Tech-Lösungen seit über 20 Jahren.

Kontaktieren Sie uns, um Ihre individuellen Bedürfnisse oder Ihr nächstes Projekt zu diskutieren.