Herausforderungen und Probleme der Embedded Software Entwicklung
Embedded Software, oft auch als Firmware bezeichnet, befindet sich ständig in ihrer dedizierten Hardware und erstellt eine einzige eingebettete Software. Unsere tägliche Umgebung, ob bei der Arbeit oder zu Hause, ist voll von Embedded-Software. Jedes elektronische Gerät ist nur aufgrund seiner nativen eingebetteten Software in der Lage, "intelligente" Funktionen zu erfüllen. Die gesamte Bandbreite von Computer-Peripheriegeräten wie Monitore, Drucker, Router, Digitalkameras, USB-Sticks, Kopfhörer etc. sowie Haushaltsgeräte wie Waschmaschinen, Mikrowellenherde, digitale Fernseher, Videokameras, Mobiltelefone und so weiter basieren im Kern alle auf Embedded-Software.
Was macht Embedded Software so weit verbreitet?
Wie wir oben erwähnt haben, enthalten fast alle Geräte in unserer Umgebung Elemente von eingebetteter Software, ganz zu schweigen von geschäftskritischen Anwendungen wie z.B. verschiedenen industriellen Automatisierungsgeräten, elektronischen Steuereinheiten und Antiblockiersystemen in Autos oder Raketenführungssystemen. Natürlich bezieht es sich auch auf IoT-Geräte, die jetzt so schnell an Popularität gewinnen.
Embedded Software wird praktisch in jeder Branche eingesetzt, z.B.: Automobilindustrie, Luftfahrt, Telekommunikation, Unterhaltungselektronik, Bankwesen, Bürotechnik und Haushaltsgeräte, Sicherheitswesen etc., um nur einige zu nennen
Was ist Embedded Software? Und was macht Embedded Software im Vergleich zu gängiger Anwendungssoftware so besonders? Nun, die wichtigsten Merkmale der Embedded-Software sind ihre höhere Zuverlässigkeit, Genauigkeit, und Leistungsgeschwindigkeit, was das Echtzeit-Computing ermöglicht. Außerdem zeichnet sie sich durch kleinere Größe und einen geringeren Stromverbrauch aus, was ihnen eine größere Vielfalt an Anwendungen eröffnet.
Jedes Gerät mit einer integrierten digitalen Schnittstelle, das die Datenverarbeitung ausführen soll, gehört zu eingebetteter Software. Ein solches System kann in einem eigenständigen Gerät oder als Teil eines größeren Systems implementiert werden, mit dem es über das Internet, Bluetooth oder andere Kommunikationskanäle in Verbindung setzt.
Ein Blick in die Geschichte
Klassische Embedded-Software (sehr einfache Mikrocontroller, logische Leiterplatten mit Triggern) wurde in Assembler oder in Kombination mit C geschrieben, wobei ein Toolkit für die Bereitstellung verwendet wurde. Jahrzehntelang mussten Entwickler von Grund auf durch die Verwendung der Low-Level-Programmierung neu kodieren und so eine Art individuelles Betriebssystem erstellen.
Später tauchten Echtzeitbetriebssysteme (Real-Time Operating Systems – RTOS) auf, die bis heute im Gebrauch sind. Eine Zeit lang waren sie die einzigen Betriebssysteme, die in eingebetteten Softwarelösungen verwendet wurden. Sie sind nach wie vor aktuell in lebens- und unternehmenskritischen Systemen, z. B. in Leiterplatten von chirurgischen Werkzeugen, Leiterplatten von Raketenführungssystemen oder in Sicherheitssystemen. Jeder Sensor, jede Leiterplatte war erforderlich, um in kürzester Zeit sofortige Maßnahmen zu ergreifen.
Für unternehmenskritische Systeme ist klassische Embedded-Software Programmierung in verschiedenen modernen und gut entwickelten Sprachen aufgrund möglicher Verzögerungen in der Systemantwort grundsätzlich keine Option, daher ist eine Low-Level-Programmierung von grundlegender Bedeutung. Alles muss genau nach dem ursprünglichen technischen Entwurf handeln. Zum Beispiel muss ein 50-Tonnen-Presslufthammer sofort anhalten, wenn die Hand des Bedieners zufällig in den Aufprallbereich ragt.
Autohersteller verwenden Echtzeitbetriebssysteme in Motorsteuergeräten sowohl aufgrund des hohen Reputationsrisikos als auch aufgrund nationaler regulatorischer Anforderungen. Gleiches gilt auch für Autopilot- und Kollisionsvermeidungssysteme in Flugzeugen, die zwar sehr teuer, aber nach internationalen Vorschriften obligatorisch sind.
So sind Echtzeitbetriebssysteme die einzige Lösung in bestimmten Industriegebieten. Einige Hersteller verwenden sie immer noch in Infotainment-Systemen, aber die Mehrheit der Entwickler wechselte zu Linux-Programmierung für Embedded Systems Software. Infolgedessen wird diese Kategorie von eingebetteter Software unter Linux ähnlich wie Desktop- oder Server-Apps in C geschrieben, mit dem Unterschied, dass Linux auf einem kleinen Gerät gestartet wird. Solche "imaginäre" Systeme sind keineswegs Echtzeit per se, aber mit der Entwicklung von Hardware ändert sich Es ist zu erwarten, dass die Infotainmentsysteme auf Android und Java umgestellt werden und leistungsstarke Multicore-Prozessoren zum Einsatz kommen, die diese Aufgabe bewältigen können.
Als eine andere spezifische Kategorie bei Embedded Software Development können wir die Niedrigenergie-Geräten betrachten, die in eingebetteter IoT-Software verwendet werden. Die Programmierung erfolgt in C oder Assembler oder anderen Sprachen mit einem Toolkit, das speziell für Echtzeitsysteme entwickelt wurde wie z.B. Micrium Wallet. Derzeit ermöglichen Frameworks wie Azure IoT Hub die Bereitstellung solcher Software auf jedem Gerät, zum Beispiel, Arduino oder Raspberry Pi.
Ähnlich wie bei Mobile Device Management geht es bei IoT Device Management um die Remote-Verwaltung einer großen Anzahl von Geräten, z. B. in einer Werkstatt oder einem Logistikzentrum. Das Standardpaket besteht aus Arduino oder Raspberry Pi sowie Azure IoT Hub, welche die zentrale Verwaltung all dieser Geräte ermöglichen. Im Falle von Geräten wie Arduino muss ein benutzerdefinierter Treiber für jede Leiterplatte (Mikrocontroller) unter Verwendung eines standardisierten IoT-Protokolls geschrieben werden.
Zusammensetzung der eingebetteten Software
Je nach Komplexität des Geräts verwenden alle Embedded Lösungen Mikrocontroller, Mikroprozessoren oder andere spezielle Verarbeitungseinheiten wie digitale Signalprozessoren (DSP) als Herzstück ihrer dedizierten Hardware.
Der folgende Satz eingebetteter Softwarekomponenten ist üblich:
- Benutzerschnittstelle;
- Eingangs- /Ausgangsschnittstellen;
- Prozessor;
- Speicher;
- Zeitgeber;
- Serielle Kommunikationsanschlüsse;
- Schaltkreise zum Anschluss an andere Systeme.
Grundelemente von eingebetteter Software
Und natürlich ein Stück spezifischer Embedded-Software, um entworfene Funktionalität bereitzustellen. Das System kann je nach Verwendungszweck programmierbar oder nicht programmierbar sein.
In Bezug auf die Anforderungen an die Systemleistung, Funktionalität und Kapazität des Mikrocontrollers gibt es mehrere Kategorien von Embedded Software. Die ersten vier basieren auf Anforderungen an die Systemleistung / Funktionalität; die anderen drei beziehen sich auf die Kapazität des Mikrocontrollers.
Arten eingebetteter Systeme: Balance zwischen Funktionalität, Leistung und Kapazität
Herausforderungen bei Embedded Software Development
Embedded Software ist immer Bestandteil eines größeren Systems, zum Beispiel einer Digitaluhr, eines Smartphones, eines Fahrzeugs oder automatisierter Industrieanlagen. Solche eingebetteten Lösungen müssen unter allen Umständen innerhalb der vom Design festgelegten Zeit in Echtzeit reagieren und unter der Bedingung begrenzter Speicherkapazität, Verarbeitungsleistung und Energieversorgung arbeiten. Außerdem, muss eine Embedded Software immun gegen Änderungen in seiner Betriebsumgebung sein – Prozessoren, Sensoren und Hardwarekomponenten können sich im Laufe der Zeit ändern. Weiter anspruchsvolle Anforderungen an Embedded-Software sind Portabilität und Autonomie.
Herausforderung #1: Stabilität
Die Stabilität ist dabei von entscheidender Bedeutung. Unerwartetes Verhalten einer eingebetteten Software ist unzulässig und birgt ernsthafte Risiken. Endnutzer fordern, dass Embedded-Software unter allen Umständen ein einheitliches Verhalten aufweisen und dauerhaft ohne Wartung funktionieren muss.
Herausforderung #2: Sicherheit
Sicherheit ist eine Besonderheit von Embedded-Software aufgrund ihrer primären Anwendung, die mit lebensrettenden Funktionen in kritischen Umgebungen verbunden ist. Der Software Development Life Cycle (SDLC) für eingebettetes System zeichnet sich durch strengere Anforderungen und Einschränkungen in Bezug auf Qualität, Tests und technisches Know-how aus.
Herausforderung #3: Schutz (Security)
Security wurde zu einem brennenden Thema in der digitalen Welt. Die damit verbundenen Risiken wachsen exponentiell, insbesondere für IoT-Geräte, die weltweit an Popularität gewinnen und stärker miteinander verbunden werden. Da moderne Haushaltsgeräte wie Elektroherde, Kühlschränke und Waschmaschinen standardmäßig über Konnektivitätsfunktionen verfügen, ist das Internet der Dinge (IoT) jetzt einem ernsthaften Risiko von Hacker-Angriffen ausgesetzt. Die dringendsten Sicherheitsbedenken im Jahr 2020 waren beispielsweise der Schutz vor Malware oder Lösegeld-Erpressung, finanziellen Verlusten und Datendiebstahl sowie die Verletzung von geistigem Eigentum und die Preisgabe vertraulicher Informationen.
Herausforderung # 4: Einführungsphase
Time-to-Market und Time-to-Revenue waren schon immer harte Indikatoren bei Embedded Software Entwicklung, vor allem im IoT-Segment. Aus diesem Grund werden die Apps und Plattformen, die zahlreiche IoT-Geräte unterstützen sollen, voraussichtlich 13,8 Milliarden Einheiten im Jahr 2021 erreichen und bis 2025 eine 30-Milliarden-Marke überschreiten. Die Herstellung von Hardwarekomponenten und Embedded System Software erfordert aufgrund der sehr schnellen Entwicklung der IoT-Industrie eine extreme Integration und Flexibilität. Darüber hinaus werden zukünftige Updates und Versionen unter Berücksichtigung einer längeren Lebensdauer von IoT-Geräten zu einem Problem für Entwickler der Komponenten.
Herausforderung # 5: Designbeschränkungen
Die Herausforderungen beim Entwurf eingebetteter Software liegen seit Jahrzehnten immer in den gleichen beschränkenden Anforderungen:
- Kleiner Formfaktor;
- Niedrige Energie;
- Langfristige, stabile Leistung ohne Wartung.
Der Markt verlangt von Entwicklern, mehr Verarbeitungsleistung und längere Akkulaufzeit in kleinere Räume zu packen, was oft nur als Kompromiss erreicht werden kann. Abhängig von den Anwendungen im IoT besteht schließlich eine wachsende Nachfrage nach der Herstellung sehr skalierbarer Prozessorreihen, die von billigen und extrem stromsparenden bis hin zu höchstleistungsfähigen und hochgradig konfigurierbaren Prozessoren mit aufwärtskompatiblen Befehlssätzen reichen. Es besteht eine ähnliche Nachfrage nach erhöhter Leistung von Systembussen und internen / externen Cache-Speichern.
Herausforderung #6: Kompatibilität und Integrität
Nach der Schätzung von Gartner Group werden die meisten Apps auf den Markt von Unternehmen eingeführt, die vor weniger als 3 Jahren gegründet wurden. Bei all ihrem wahrscheinlichen Fachwissen in der Softwareentwicklung fehlt vielen von ihnen die praktische Erfahrung bei der Implementierung und Aktualisierung ihrer Anwendungen in der IoT-Umgebung, insbesondere im Hinblick auf die Sicherheit. In seinem Unit 42 IoT Threat Report vom Jahr 2020 hat Palo Alto Networks festgestellt, dass 98% des vorhandenen Datenverkehrs von IoT-Geräten nicht gesichert ist, was eine Bedrohung für den Angriff auf vertrauliche Informationen und die Offenlegung persönlicher Daten darstellt.
Der weitere Ausbau von IoT-Geräten vor dem Hintergrund ihrer Konnektivität setzt deren Anpassungsfähigkeit stärker unter Druck. Benutzer müssen in der Lage sein, die App durch eine einfache Benutzerschnittstelle über alle verfügbaren Kanäle zu verwalten, einschließlich over-the-air Firmware Updates, die extreme Kompatibilität über das gesamte Ökosystem benötigen.
Integrität wird zu einer Funktion der Sicherheit. Um das IoT vor böswilligen Angriffen oder Beeinträchtigungen zu schützen, muss die Sicherheit in jedem Gerät auf jeder Ebene implementiert werden: dem Endknoten, dem Gateway, der Cloud usw.
Schlüsselfragen bei Embedded Software Development
Ob es uns gefällt oder nicht, die Zahl der weltweit vernetzten Geräte wächst laut Statista jedes Jahr exponentiell. Die Entwickler der Embedded Systems Software Lösungen werden auf diesem Weg mit vielen spezifischen Problemen konfrontiert. Wir haben nicht die Absicht, sie alle im Detail zu behandeln; lassen Sie uns einen Blick auf einige von ihnen werfen.
IoT-vernetzte Geräte weltweit
Konnektivität
Es gibt so viele verschiedene Möglichkeiten, das Gerät mit dem Internet zu verbinden. Eine drahtlose Verbindung kann über WLAN, Ethernet, Edge, LoRa, ein Bluetooth-Bridge und andere Kanäle hergestellt werden. Abgesehen von ihren Vor- und Nachteilen wird jeder von ihnen mit einem anderen Technologie-Stack erstellt, was bedeutet, dass Entwickler über Fachwissen in allen von ihnen verfügen müssen. Außerdem ist es kompliziert, zu entscheiden, welches Protokoll zu verwenden ist: UDP, COAP, TCP/IP usw. oder einige Protokolle gleichzeitig plus TLS und/oder MQTT. Vorkonfigurierte Software-Stacks lösen teilweise diese Komplexität, aber das Problem bleibt, dass Entwickler über genügend Wissen verfügen sollen, um zu verstehen, wenn etwas kaputt geht oder Änderungen vorgenommen werden müssen.
Over-the-Air-Updates
Neben dem Problem der Verbindung zum Internet steht das Problem der Remote-Updates der Firmware. Im Falle eines eigenständigen Geräts reicht es aus, die Aktualisierung an eine sichere Seite zu senden und den Nutzer aufzufordern, die Software herunterzuladen und zu installieren. Anders sieht die Situation bei den IoT-Geräten aus; die Updates müssen ohne Eingriff des Benutzers selbst geliefert und ausgeführt werden.
Zum Glück gibt es Lösungen, die die Remote-Installationen auf mehreren virtuellen Maschinen ermöglichen und End-to-End-Orchestrierung des Verpackungsvorgang und Automatisierung von Routineaufgaben anbieten.
Stellen Sie sich nun eine Alternative vor: Eine kleine IoT-Bereitstellung umfasst ein paar Tausend Geräte. Anschließend müssen Entwickler die folgenden Aufgaben erfüllen: ein Firmware-Update erstellen; es auf den Geräten speichern; überprüfen, ob es von einer vertrauenswürdigen Quelle bereitgestellt wird; das Update zum angegebenem Zeitpunkt auf den Geräten ausführen und bereit sein, ein Rollback der Aktualisierung auszuführen, falls ein Problem auftritt.
Diese Arbeit ist ziemlich schwierig und zeitaufwendig, sie erfordert viel Geschick von Entwicklern, welche Erfahrung in der Bereitstellung der Updates in der IoT-Umgebung haben müssen.
Debuggen
Das Debuggen (Fehlersuche) ist ein allgemeines Problem, das gemeinsam mit der Anzahl der angeschlossenen Geräte wächst – Zeit und Aufwand für das Debuggen wachsen parallel dazu an. Im Zuge der Integration von Open-Source-Software treten in einem System, das unzählige Geräte mit freiem Durchfluss verwendet, mehr unerwartete Verhaltensweisen auf als in einem System, das von Anfang an speziell für die Interaktion mit diesen Geräten entwickelt wurde. Viele Entwickler von Embedded System Software geben an, dass jedes Embedded Projekt zusätzliche Kosten für das Debuggen verursacht und bis zu 40% der Zeit der Entwickler in Anspruch nimmt.
Tempo des Wandels
Einige Jahrzehnte lang waren die für Embedded Software verwendeten Technologien fast identisch, wobei einmal im Jahr ein neuer, leistungsfähigerer Prozessor auf den Markt kam. Dann begann sich die Entwicklung irgendwann zu beschleunigen. In den letzten 5 Jahren erleben wir eine schnelle Entwicklung aufkommender Technologien, einschließlich künstliche Intelligenz. Das stellt Entwickler vor ein Problem, da sich verfügbare Technologien schneller ändern, als sie diese in die Hände bekommen können.
Ära der Embedded Software
Trotz der Herausforderungen und Probleme, mit denen Entwickler beim Übergang von eigenständigen zu verbundenen Geräten konfrontiert sind, finden sie während dessen effiziente Lösungen. Die Schwierigkeit besteht darin, neue Fähigkeiten schnell genug zu erlernen und in der schnelllebigen Welt immer an der Spitze zu bleiben.
Neben Variabilität, Konfigurierbarkeit, Erweiterbarkeit und Veränderbarkeit bringt die Entwicklung von Embedded Lösungen zusätzliche Funktionalität in intelligente Geräte, die heute als selbstverständlich betrachtet werden. Ihr Potenzial kann mit dem 5G-Ausbau weiter verbessert werden, da sie Echtzeitinformationen sowie eine stabile Kommunikationsinfrastruktur bietet, die für eingebettete Systeme von entscheidender Bedeutung sind.
Wir können davon ausgehen, dass eingebettete Software bald überall zu finden sein wird, von Smart Watches über Smart Häuser bis hin zu allgegenwärtigen Steuerungssystemen, wobei das Gesamtmarktvolumen bis 2025 auf 116.2 Milliarden US-Dollar steigen wird. Parallel dazu steigern moderne Technologien die Effizienz von Stromquellen.
Die Embedded Systems Software wird immer unabhängiger von der Hardware, in der sie sich befinden. Sie wird nicht mehr durch Hardware-Beschränkungen definiert und ist in der Lage, jede Funktion auszuführen, um ihre Ziele auf jedem programmierbaren Logikgerät zu erreichen, sei es ein Mikrocontroller, ein Mikroprozessor, ein Signalprozessor, ein neuronales Netzwerk oder eine biologische Einheit.
Die Embedded System Software wird auch in Zukunft einen Beitrag zur wachsenden Lebensqualität leisten und neue Möglichkeiten zur Verbesserung des Lebensstandards auf der ganzen Welt eröffnen.
Infopulse bietet Dienstleistungen in Bezug auf die Entwicklung der Embedded Software und Outsourcing über den gesamten Zyklus, einschließlich Firmware Entwicklung, Embedded Software- und Hardwaretests sowie Integration mit Drittsystemen. Unsere Embedded Software Engineers verfügen über fundierte Kenntnisse in C / C ++ und anderen Low-Level-Programmiersprachen und liefern ausschließlich erstklassige Embedded-Lösungen für Unternehmen aus den Bereichen Automobilindustrie, Hightech, Fertigung, Telekommunikation und anderen Branchen.