Embedded-Anwendungen benötigen bisweilen eine Flexibilität, wie sie Smartphones durch Apps bieten. Es liegt also nahe, Apps auch in Embedded-Anwendungen zu integrieren. Doch was können Apps dort letztlich bewirken, welche Voraussetzungen müssen sie erfüllen, und wie funktionieren sie dort technisch?
Während Apps für Smartphones völlig neue Anwendungsgebiete geschaffen haben, ergeben sich für Embedded-Anwendungen oft weniger komplexe, aber dennoch wichtige Anforderungen. Wenn bestimmte Konfigurationen je nach Einsatzort unterschiedliche Funktionen benötigen, lassen sich diese durch Apps entsprechend anpassen. Auch Branding-Anforderungen sind über Apps umsetzbar, ohne die Integrität der Originalfunktion zu gefährden.
Bei Embedded-Anwendungen müssen begrenzte Ressourcen immer berücksichtigt werden. Im Gegensatz dazu spielen diese Einschränkungen bei Smartphones oft eine untergeordnete Rolle. Hier haben sich Apps und App Stores etabliert und ermöglichen eine zuvor kaum vorstellbare Flexibilität und Modularität. Die Grundlage dafür bildet das nachträgliche Installieren von Funktionen oder Apps.
Für Embedded-Anwendungen stellt sich daher die Frage, welche Voraussetzungen erfüllt sein müssen, um eine ähnliche Flexibilität zu erreichen. Dabei müssen mehrere Aspekte berücksichtigt werden: Wie groß ist der zusätzliche Overhead durch nachladbare Apps? Entstehen dadurch Sicherheitsrisiken? Und reicht die Performance aus, um eine Kapselung der Apps zu gewährleisten?
In der klassischen Firmwareentwicklung wird üblicherweise eine monolithische Firmware generiert, die bei Änderungen vollständig neu erzeugt und unter Umständen erneut qualifiziert werden muss. Durch die Nutzung von Apps verändert sich dieser Entwicklungsprozess grundlegend. Funktionen lassen sich dann in kleinere Module auslagern, die nur bei Bedarf ins System geladen werden.
Dadurch entstehen zusätzliche Möglichkeiten hinsichtlich Zukunftssicherheit und Updatefähigkeit. Bei einer Anpassung der Spezifikation stellt sich zusätzlich die Frage, ob die Firmware vollständig ersetzt werden muss oder ob die gewünschten Anpassungen auch über eine App umsetzbar sind. Auf diese Weise lassen sich auch Entwicklungszyklen verkürzen.
Im Wesentlichen benötigen Apps Speicher, in dem sie ausgeführt werden können. Der Ressourcenbedarf hängt dabei maßgeblich von der Codedichte der Apps ab. Für die Programmierung von Apps, die in Embedded-Systemen laufen sollen, sind daher effiziente Programmiersprachen entscheidend. Zusätzlich muss die API auf das jeweilige Anwendungsgebiet des Embedded-Systems abgestimmt sein. Damit lassen sich Performance und Ressourcenbedarf so weit reduzieren, dass auch ressourcenbeschränkte Embedded-Systeme spezialisierte Apps ausführen können.
Neben der Möglichkeit, Funktionen flexibel nachzurüsten, spielt Sicherheit eine entscheidende Rolle. Damit Apps weder die Funktion des Systems gefährden noch als Einfallstor für Schadsoftware missbraucht werden können, müssen sie so vom System abgekapselt werden, dass jede Interaktion mit dem System sicher bleibt oder spätestens dann unterbunden wird, wenn sie sich außerhalb ihres festgelegten Rahmens bewegt.
Zwei wesentliche Faktoren sind dabei die Nutzung einer virtuellen Umgebung und die Überwachung einer vorher definierten API. Hieraus ergeben sich weitere Kosten hinsichtlich Ressourcenbedarf und Performance, die sich jedoch in Grenzen halten. Bei Verwendung von Seggers emApps benötigt die virtuelle CPU nur ungefähr 2,5 kByte Speicher. Die Codedichte des Befehlssatzes wurde so gewählt, dass die Apps kompakt bleiben und gleichzeitig die Performance maximiert wird.
Beim Einsatz virtueller Umgebungen stellt sich schnell die Frage nach der Performance. Unbestritten lässt sich virtueller Code im Hostsystem nicht so schnell verarbeiten wie nativer Code. Durch eine geschickte Auslegung des Befehlssatzes ist dieser Effekt jedoch reduzierbar.
Ein zweiter Ansatz ist besonders bei zeitkritischen Elementen von Bedeutung: Mithilfe der bereitgestellten API lassen sich zeitkritische Berechnungsfunktionen ins native System verlagern, ohne dabei die Integrität des Systems zu gefährden. Beispiele hierfür sind Funktionen, die mit Hardwarebeschleunigung ausgeführt werden können, etwa aus den Bereichen Kryptographie oder Benutzeroberfläche.
Die emApps-Plattform ermöglicht es Entwicklern, nachladbare, vom Hauptsystem mittels Sandbox abgeschirmte Apps zu erstellen und in ihre Produkte zu integrieren.
emApps ist ein Framework für die Nutzung und Erstellung kleiner, portabler Applikationen für Embedded-Systeme, die sich durch eine starke Kapselung auszeichnen. Entwickler und potenziell auch Endkunden können eigene Apps in C schreiben, die auf eine kontrollierte API zugreifen können, welche in der Firmware definiert wird. Der Hersteller des Geräts entscheidet, wie Apps in das Endgerät gelangen können und welche Fähigkeiten diesen Apps eingeräumt werden. So lässt sich beispielsweise der Zugriff auf das Filesystem erlauben und gleichzeitig auf Read-Only-Zugriffe beschränken.
Kernpunkt der App-Integration ist emApps, dessen Executor lediglich etwa 2,5 kByte Speicher benötigt. Die Apps laufen in einem virtuellen Prozessor, der strikt vom Hostsystem getrennt ist. Die verfügbare API wird dabei vom Hostsystem definiert.
Neben ersten Kundenprojekten setzt Segger selbst schon seit einigen Jahren auf Apps, die in den unterschiedlichsten Szenarien eingesetzt werden.
Ein Beispiel sind die Stand-alone-Programmiergeräte der Serie »Flasher« von Segger. Damit der Stand-alone-Betrieb reibungslos funktioniert, muss der Flasher alle benötigten Flashloader bereithalten. Ursprünglich wurden diese vollständig im Flasher implementiert, bis der verfügbare Speicherplatz nicht mehr ausreichte. Diese Herausforderung führte schließlich zur Entwicklung von emApps. Seitdem werden Teile der Flashloader gemeinsam mit der Konfiguration als App in den Flasher geladen, so dass auch bei mehr als 26.000 unterstützten Target Devices genügend Speicher für die Flashloader im Flasher verfügbar bleibt.
Segger betreibt außerdem eine eigene Testfarm, in der Apps für Regressionstests eingesetzt werden. Diese Apps führen beispielsweise Performancemessungen mithilfe von Memory-Copy-Loops durch.
In Produktionsumgebungen lassen sich Apps auch verwenden, um Testanwendungen in die Zielhardware zu laden und dort Selbsttests der Hardware durchzuführen und so die Qualitätssicherung in der Produktion zu verbessern.
Ein weiteres Anwendungsfeld betrifft das Branding von OEM-Geräten. In solchen Fällen können Endgerätehersteller eigenständig Modifikationen an den Geräten vornehmen. Um dabei die Funktion des Basismoduls zu sichern, bekommen die Hersteller Schnittstellen zur Verfügung gestellt, über die sie Branding-Module als Apps in ihre Geräte integrieren können.
Embedded-Systeme unterliegen wegen ihrer wachsenden Aufgaben und Anforderungen einem stetigen Wandel. Apps für Embedded-Systeme könnten eine Art App-Store-Moment für die Industrie bedeuten, indem sie die Anpassung von Systemen durch einfache Funktionserweiterungen ermöglichen, ohne dabei die Stabilität des Gesamtsystems zu gefährden. Durch die höhere Anpassungsfähigkeit lassen sich Produkte länger am Markt halten, wodurch sich Entwicklungskosten leichter amortisieren können.
Was auf jeden Fall bleibt, ist eine spannende neue Technologie, mit deren Hilfe sich viele Konzepte neu denken lassen und die damit neue Möglichkeiten für Endbenutzer eröffnet.
Wer ausprobieren will, wie die Programmierung mit emApps aussehen kann, findet online unter https://www.segger.com/products/virtualization/emapps/compiler/?mtm_campaign=elekronik&mtm_kwd=emapps einen Executor zur Ausführung von Apps in PC-Systemen sowie verschiedene Beispielanwendungen mit fertigem App-Code. Dieser lässt sich anpassen, kompilieren und direkt mit dem Executor testen.