Suchen

Embedded Software als integriertes Paket

| Autor / Redakteur: Giancarlo Parodi* / Christine Kremser

Bei der Auswahl kommerzieller Software, wird erwartet, dass diese vom Zulieferer qualifiziert und nach kommerziellen Standards getestet wird und kompatibel mit der Zielplattform ist. Dieser Artikel stellt das Konzept eines integrierten Softwarepakets vor, dessen Komponenten nach dem IEC/ISO/IEEE-12207 Standard entwickelt, integriert und getestet worden sind.

Firma zum Thema

Eine Paketlösung anstelle diverser Einzelkomponenten kann den Entwicklungsaufwand im Embedded-Umfeld deutlich verringern.
Eine Paketlösung anstelle diverser Einzelkomponenten kann den Entwicklungsaufwand im Embedded-Umfeld deutlich verringern.
(Bild: gemeinfrei/Pixabay / CC0 )

Die Komplexität der heutigen vernetzten eingebetteten Systeme ist im Vergleich zur Vergangenheit um ein vielfaches gewachsen. Die Entwickler müssen viel Zeit in die Bereitstellung von Basisfunktionalitäten investieren: Geräte-Treiber und „middleware“ konzipieren, ein Echtzeitbetriebssystem integrieren, womöglich auch Cloud-basierte Anwendungen in Anspruch nehmen.

Bildergalerie
Bildergalerie mit 16 Bildern

Eine gut entwickelte Software-Architektur ist ein Schlüsselfaktor, um eine reibungslose Entwicklung und Test-Phase zu ermöglichen, insbesondere wenn mehrere miteinander verbundene Module und Protokoll-Stacks benötigt werden. Was sind dann die typischen Probleme, die sich dem Software Entwickler stellen?

Der Micro-Controller-Hersteller stellt Software zur Verfügung, oft in Form einer “Application-note” oder eines “Beispiels”. Der Entwickler kann diese kostenlos erhalten und für ein Produkt dieses Herstellers verwenden. Der Hersteller übernimmt aber keine Verantwortung für die Eigenschaften und das Verhalten dieser Software, was in dem Copyright Text in der Regel explizit erwähnt wird. Die Wortwahl “provided as-is” ist ein typischer Satz, der die Verantwortung für Entwicklung und Test der Software ausschließlich auf die Schulter des Anwenders schiebt.

Sehr oft stellen solche Softwaremodule eine einfache Funktionalität dar und sind deswegen für ein simples Testen einer einzelne Peripherie wohl hilfreich, aber nicht geeignet um reibungslos in einer komplexeren Applikation integriert zu werden. Dazu kommt noch dass eventuelle komplexere Middleware-Protokolle weder im vollen Umfang noch als geprüfte Software geliefert werden. Damit steigt das Risiko dass es Inkompatibilitäten bei der Integration von Software Paketen aus unterschiedlichen Quellen gibt, und die Evaluierung bzw. das Testen somit noch mehr Zeit in Anspruch nimmt.

Andere Schwierigkeiten bereitet dann der Fall, dass eines dieser Software Module von dem Software-Hersteller erneuert wird. Dieses wird nicht gegenüber anderen Software-Paketen verifiziert und das gesamte System muss deswegen neu getestet werden, sobald eine der Komponenten gegen eine neuere Version ausgetauscht wird oder einzelne Korrekturen der fehleranfälligen Software mit einem sogenannten „Software-Patch“ vorgenommen werden müssen.

Die kommerziellen Hindernisse sind auch relativ hoch, weil es in einem solchen Szenario schwierig wird, dass die Software-Hersteller eventuelle Probleme an ihren Modulen nachvollziehen können oder wollen, sobald diese in eine komplexere kundenspezifische Applikation integriert werden.

Welche Möglichkeiten gibt es also für den Entwickler, die ihm das Leben erleichtern können? Es gibt unterschiedliche Aspekte im Zusammenhang mit Werkzeugen, Systemen und Software-Architekturen, die helfen können, die Entwicklungszeit zu reduzieren, den Optimierungs- und Testaufwand zu minimieren und dabei zu einer Applikation führen die für die Zukunft einfacher zu verwalten ist.

Standardisierte C-Compiler

Angefangen von der Tool-Landschaft, ist meist verwendete Programmiersprache immer noch C. Es gibt unterschiedliche Versionen von diesem Standard, die Empfehlung ist, mindestens Compiler zu verwenden, die den ANSI C99 Standard unterstützen. Das bringt einige Vorteile, wie zum Beispiel das Benutzen von <stdint.h> and <stdbool.h>, „designated initializers“, die Möglichkeit Programm und Variablendeklarationen zu mischen, usw.

Diese sind hilfreich, um sicherzustellen dass alle Komponenten einer Struktur einen gewissen Wert zugewiesen bekommen können, ohne dabei eine strikte Reihenfolge berücksichtigen zu müssen. Oder dass Variablen im Programm erst dann definiert sind, wenn sie benötigt werden. Die Benutzung von Aufzählungstypen ist auch zu empfehlen, um dem Compiler bessere Möglichkeiten zu geben, dass Funktionsparameter zu Kompilierungszeit überprüft werden können und die Applikation durch diese mnemonische Symbole für den Entwickler verständlicher wird.

(ID:44296110)