Embedded-Software entwickeln

Dipl.-Ing. Thomas Eißenlöffel studierte Elektrotechnik an der Universität Karlsruhe (TH). Anschließend ging er zu Alcatel in die Software-Entwicklung für Funkmessdatensysteme. Nach seiner Tätigkeit als weltweit verantwortlicher technischer Produktmanager bei Force Computers leitet er bei der MBtech Group u.a. Projekte für Steuergeräte-Software. Er ist SPICE Assessor und Senior Expert für Embedded Software und Safety.

Thomas Eißenlöffel

Embedded-Software entwickeln

Grundlagen der Programmierung eingebetteter
Systeme – Eine Einführung für Anwendungsentwickler

Thomas Eißenlöffel
E-Mail: thei@gmx.de

Lektorat: René Schönfeldt
Copy-Editing: Annette Schwarz, Ditzingen
Herstellung: Nadine Thiele
Umschlaggestaltung: Helmut Kraus, www.exclam.de
Druck und Bindung: M.P. Media-Print Informationstechnologie GmbH, 33100 Paderborn

Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;
detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

ISBN:
Buch 978-3-89864-727-4
PDF 978-3-86491-099-9
ePub 978-3-86491-100-2

1. Auflage 2012
Copyright © 2012 dpunkt.verlag GmbH
Ringstraße 19 B
69115 Heidelberg

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.

5 4 3 2 1 0

Vorwort

Hier lesen Sie

  für wen dieses Buch interessant ist

  was Sie darin erfahren

  und was Sie darin nicht erfahren

Wer sollte dieses Buch lesen?

Embedded-Einsteiger

Wenn Sie gerade Ihr Informatikstudium abgeschlossen oder sich bisher mit der Anwendungsentwicklung für Arbeitsplatzrechner beschäftigt haben oder nur mit Programmen zu tun hatten, die auf Bildschirm, Tastatur und Dateien zugreifen, und nun Software für Embedded-Systeme entwickeln wollen, stehen Sie vor vielen neuen Herausforderungen.

Denn Software für Embedded-Systeme unterscheidet sich teilweise sehr stark von Anwendungsprogrammen, die auf Arbeitsplatzrechnern (wie PC oder Mac) oder auf Servern im Netz laufen und von Anwendern bedient werden. Embedded-Software muss etwa in einer Aufzugssteuerung Sensoren überwachen und Motoren ein- und ausschalten.

Dieses Buch hilft Ihnen, sich in der für Sie noch neuen Welt der Embedded-Systeme, insbesondere auch der Echtzeitsysteme zurechtzufinden.

Entwickler mit Embedded-Erfahrung

Haben Sie bereits Software für Embedded-Systeme entwickelt, gibt Ihnen dieses Buch Anregungen, Tipps und beschreibt Vorgehensweisen, die ich in langjähriger Praxis in verschiedenen Branchen kennengelernt habe.

Falls Sie sich zwar in einem bestimmten Teilbereich der Embedded-Softwareentwicklung gut auskennen, wie z.B. der Implementierung, aber bisher mit anderen Entwicklungsschritten wie Architektur, Design oder Test nur wenig zu tun hatten, hilft Ihnen dieses Buch, einen Überblick über die gesamte Bandbreite der Entwicklungstätigkeiten zu bekommen und besser zu verstehen, wie die verschiedenen Aktivitäten zusammenhängen und ineinandergreifen.

Was erfährt der Leser?

Dieses Buch gibt im Grundlagen-Kapitel einen Überblick darüber, was Sie als Softwareentwickler im Embedded-Bereich erwartet und was dort anders ist als im Umfeld der betrieblichen Anwendungsentwicklung.

Die Kapitel nach dieser Einführung beschreiben die Entwicklung von Embedded-Software, die zur Steuerung und Regelung auf vielen Gebieten eingesetzt wird, z.B. in Maschinen und Medizintechnik, in Kraftfahrzeugen und Flugzeugen, in Telefon- und Industrieanlagen. Die Beschreibung stützt sich dabei auf einen Entwicklungszyklus, der von der Analyse der Anforderungen über Architektur, Design und Implementierung bis hin zur Integration und zum Softwaretest reicht und auch Planungs-, Qualitäts- und Sicherheitsaspekte berücksichtigt.

In jedem Prozess-Schritt des Software-Entwicklungszyklus werden die speziellen Anforderungen eines Embedded-Systems bzw. Echtzeitsystems herausgestellt und die Maßnahmen anhand von Beispielen aus der Praxis begründet. Für typische Probleme werden Lösungen vorgestellt und diskutiert. Die dabei vermittelten Tipps werden Ihnen helfen, sichere, schnelle und wartungsfreundliche Software für Embedded-Systeme zu entwickeln.

Die einzelnen Kapitel bauen aufeinander auf, können aber je nach Aufgabenstellung und Interesse auch separat durchgearbeitet werden, setzen allerdings das Know-how aus dem Grundlagen-Kapitel voraus.

Echtzeitsysteme

Da sehr viele Embedded-Systeme Echtzeitsysteme sind, bei denen die rechtzeitige Reaktion oder Abarbeitung einer Aufgabe höchste Priorität hat, beleuchte ich diesen Aspekt in allen Entwicklungsschritten besonders.

Sie werden in diesem Buch viele wertvolle Tipps aus der Praxis finden, etwa zur Vorgehensweise bei Entwicklung und Test. Diese helfen Ihnen, die Robustheit und Antwortzeit Ihres Systems auch dann zu verbessern, wenn Echtzeit für Ihre Aufgabenstellung keine Anforderung ist.

Die Grundlagen

Das Grundlagenkapitel vermittelt die in den darauf folgenden Kapiteln verwendeten Grundbegriffe.

Systemarchitekturen

Wie die Architekturen von Embedded-Systemen und ihrer Software aufgebaut sind und sich von der PC-Architektur unterscheiden, erläutert dieser Abschnitt.

Echtzeitbetriebssysteme

Viele Embedded-Systeme sind Echtzeitsysteme. Echtzeitanwendungen verwenden deshalb spezielle Betriebssysteme. Das Grundlagenkapitel erklärt deren Grundfunktionen und deren spezielle Echtzeitbetriebssystemdienste.

Entwicklungsprozess

Es folgt die Beschreibung eines Entwicklungsprozesses, an dem sich die Gliederung der Folgekapitel orientiert.

Dokumentation

Was Sie bei der Entwicklung von Embedded-Software dokumentieren sollten und wie Sie mit möglichst wenig Aufwand Softwaredokumentation erzeugen, wird ebenfalls im Grundlagenkapitel erklärt. Beispielcode zeigt, wie man Dokumentation bereits bei der Implementierung quasi »nebenbei« mitschreibt.

Planung

Auch wenn Sie primär Software entwickeln, werden Sie hin und wieder mit der Planung konfrontiert. Sowohl bei der Zeit- als auch bei der Ressourcenplanung müssen Sie Aufwände speziell für die Entwicklung von Embedded-Software berücksichtigen.

Qualitätssicherung, Reviews und Tests

Qualitätsanforderungen im Embedded-Bereich unterscheiden sich sehr stark von denen für PC- und Server-Software. Mit Fehlern muss in Embedded-Systemen anders umgegangen werden, da eine korrigierte Softwareversion nicht so einfach in die ausgelieferten Geräte geladen werden kann.

Reviews sind ein unverzichtbares Werkzeug zur Qualitätssicherung von Embedded-Software. Das Grundlagenkapitel beschreibt neben der prinzipiellen Vorgehensweise auch, in welchen Prozess-Schritten Reviews die Qualität von Embedded-Software verbessern.

Welche Qualität die Tests von Embedded-Software haben müssen, wird in diesem Zusammenhang ebenfalls erklärt.

Sicherheit

Ein Abschnitt im Grundlagenkapitel beschreibt schließlich das Thema Sicherheit. Der Schwerpunkt wird dabei eher auf der Funktionssicherheit (engl. functional safety) und weniger auf der Zugriffssicherheit (engl. security access) liegen. Der Grund hierfür ist, dass Anforderungen an die funktionale Sicherheit von Embedded-Software enormen Einfluss sowohl auf den Entwicklungsprozess als auch auf die Entwicklungswerkzeuge und die Softwarearchitektur haben. Wer Software für Embedded-Systeme erstellt, deren Fehlfunktion eine Gefahr für Leib und Leben von Menschen darstellen könnte, muss z.B. eine Norm wie die IEC 61508 oder ISO 26262 berücksichtigen.

Der Entwicklungsprozess

Das V-Modell

Die auf das Grundlagenkapitel folgenden Kapitel sind nach dem sogenannten V-Modell gegliedert, an dem sich der Ablauf einer Software-entwicklung im Embedded-Bereich häufig orientiert. Das V-Modell beschreibt einen Entwicklungsprozess, der in mehrere Phasen unterteilt ist: Anforderungsanalyse, Architektur, Design, Implementierung und verschiedene Test- und Integrationsphasen.

Falls Sie das V-Modell nicht kennen, gibt Ihnen die nachfolgende Kurzbeschreibung der Prozess-Schritte eine Einführung, und Sie erfahren, in welchem Prozess-Schritt welche Aktivitäten ablaufen und in welchem der Folgekapitel welche Themen behandelt werden.

Angepasste Entwicklungsprozesse

Natürlich ist der Ablauf der Softwareentwicklung in einem spezifischen Projekt im Detail von vielen Faktoren abhängig. Wird in Ihrem Projekt etwa nur ein Algorithmus angepasst, werden Sie wahrscheinlich den ein oder anderen Prozess-Schritt nicht (z.B. Architekturentwurf) oder nur verkürzt (z.B. Design) durchführen.

Dann können Sie sich die passenden Kapitel herausgreifen bzw. die nicht relevanten auslassen.

Andere Prozessmodelle

Auch wenn Sie für Ihre Vorgehensweise nicht das V-Modell verwenden, werden Sie die im V-Modell beschriebenen Tätigkeiten ausführen, nur die Reihenfolge und Zuordnung ihrer Aktivitäten zu Prozess-Schritten ist dann anders.

Anforderungsanalyse

Das Kapitel Anforderungsanalyse beschreibt, nach welchen Informationen Sie in erster Linie suchen müssen und welche Quellen dafür in Frage kommen. Besonders wichtig sind Informationen über Zeitverhalten, Qualitätsaspekte und funktionale Sicherheit.

Architektur

Das Kapitel Architektur geht auf die unterschiedlichen Betriebsumgebungen von Embedded-Systemen ein, welche die Architektur von Embedded-Software wesentlich bestimmen.

Design

Das Kapitel Design erklärt, wie die spezifischen Eigenschaften von Software für Embedded-Systeme Einfluss auf den Softwareentwurf nehmen, und betrachtet sowohl eingebettete (weitgehend hardwareunabhängige) Betriebsfunktionen als auch hardwarenahe Software.

Ist die Vorgehensweise beim Design der Betriebsfunktionen noch sehr ähnlich zur Anwendungsentwicklung für PC und Server, so unterscheiden sich die Strategien und Vorgehensweisen beim Design der hardwarenahen Software beträchtlich. Dies wird an Beispielen verdeutlicht.

Implementierung

Das Kapitel Implementierung erläutert, worauf es bei der Erstellung von Quellcode für Embedded-Systeme besonders ankommt und geht auf verschiedene Programmiersprachen und die Generierung von Code ein. Beispiele sind in der Sprache »C« verfasst. Neben Eigenheiten von Cross-Compilern beschreibt das Kapitel auch, nach welchen Gesichtspunkten bei Embedded-Systemen die Software optimiert wird und wie man dabei vorgeht.

Test

Das Kapitel Test beschreibt nach der Teststrategie die Testphasen Modultest, Integrationstest und Anforderungstest und wie diese mit den Entwicklungsschritten zusammenhängen. Auch wirken Software-ingenieure beim Hardware-/Software-Integrationstest, Komponententest und Systemtest mit.

Modultest

Der Abschnitt Modultest beschreibt das Vorgehen beim Test einzelner Module und wie man die spezifischen Eigenheiten von hardwarenaher Software und Echtzeitsoftware berücksichtigt. Der Begriff der Testabdeckung wird erläutert und es werden Beispiele für verschiedene Abdeckungsgrade gegeben. Verschiedene Werkzeuge werden vorgestellt und ihre Vor- und Nachteile diskutiert.

Integration und Integrationstest

Der Abschnitt Integration und Integrationstest stellt Vorgehensweisen bei der Softwareintegration vor und was beim Integrationstest geprüft wird.

Software-Anforderungstest

Der Software-Anforderungstest zielt darauf ab, die Umsetzung der Anforderungen an die Software als Einheit nachzuprüfen. Liegt der Fokus bei der Softwareintegration auf der Interaktion der Software-module miteinander, so steht beim Anforderungstest das Zusammenspiel der Software mit seiner Umgebung im Vordergrund.

Hardware-/Softwareintegration, Komponententest und Systemtest

Ausblick

Da ein Gesamttest der integrierten Software oft nicht vollständig ohne die reale Hardware möglich ist, gehen diese Abschnitte auf die hardwarenahen Aspekte des Gesamttests und die betroffenen typischen Funktionen eines Embedded-Systems ein und beschreiben Werkzeuge und Testumgebungen und die Grenzen, an die man damit stößt. Nach den Kapiteln über den Test der Embedded-Software gehe ich auf die Aufgaben ein, die auf Sie als Softwareentwickler nach Auslieferung Ihrer Software im Zusammenhang mit dem Entwicklungsprojekt zukommen könnten.

Der zweite Abschnitt dieses Kapitels zeigt einige Trends in der Softwareentwicklung für Embedded-Systeme auf.

Glossar

Im Glossar werden alle wichtigen Fachbegriffe und Abkürzungen erläutert. Dort finden Sie auch eine Liste von Internetadressen, auf die im Text verwiesen wird.

Aufgaben des Entwicklers

Dieses Buch beschreibt nicht nur die Codierung von Embedded-Software, sondern alle Arbeiten im Software-Entwicklungsprozess, inkl. zusätzlicher Aufgaben wie Planung und Qualitätssicherung.

Falls Sie noch nicht im Embedded-Bereich gearbeitet haben, sollten Sie berücksichtigen, dass Ihnen je nach Arbeit- oder Auftraggeber nur ein Teil dieser Aufgaben übertragen wird. Bestimmte Aufgaben, wie etwa das Testen, werden von Großunternehmen oft an darauf spezialisierte Firmen vergeben und nicht selbst durchgeführt.

In größeren Unternehmen werden Sie meist nur eine einzelne Aufgabe ausführen, z.B. Spezifizieren oder Testen, und damit nur die Rolle des Spezifikations- bzw. Testingenieurs übernehmen. In Konzernen werden in Projektteams oft neben eigenen Entwicklern auch Fremdarbeitskräfte von Ingenieurdienstleistern beschäftigt, die als erfahrene Spezialisten bestimmte Aufgaben im Entwicklungsprozess übernehmen und das Team für mehrere Monate oder wenige Jahre verstärken.

In kleinen und mittleren Unternehmen werden Sie viele der Aufgaben als Entwickler selbst bearbeiten und damit verschiedene Rollen übernehmen: Architekt, Designer, Tester. In kleinen Projekten gibt es meist keine bestimmte Person für die Rolle des Systemingenieurs. Stattdessen müssen sich Software- und Hardwareentwickler diese Rolle teilen. Da Sie sich als Softwareentwickler intensiver mit der Funktionsweise der Applikation auseinandersetzen, fällt Ihnen hier meist die Verantwortung zu.

Was erfährt der Leser nicht?

Dieses Buch ist als Einführung in Embedded-Softwareentwicklung gedacht. Es gibt zwar Beispiele aus verschiedenen Branchen, das Buch ersetzt aber nicht das Studium branchenspezifischer Details, etwa Normen und Standards wie der EN 61131, welche die Grundlagen speicherprogrammierbarer Steuerungen (SPS) behandelt.

Der in diesem Buch skizzierte Software-Entwicklungsprozess dient der Strukturierung der vermittelten Informationen. Das Buch erhebt nicht den Anspruch, einen vollständigen Entwicklungsprozess zu beschreiben.

Zwar geht das Buch auf viele für Embedded-Systeme relevanten Testarten ein und vermittelt Tipps zum Test von Embedded-Software, es ist aber kein Fachbuch für Teststrategien und Testkonzepte.

Inhaltsverzeichnis

1

Grundlagen

1.1

Hardwarearchitekturen

1.2

Zeitverhalten

1.3

Betriebssysteme

1.4

Entwicklungsumgebungen

1.5

Entwicklungsprozesse

1.6

Konfigurations- und Variantenmanagement

1.7

Planung

1.8

Qualität

1.9

Sicherheit

1.10

Dokumentation

2

Anforderungsanalyse

2.1

Quellen

2.2

Funktionale Anforderungen

2.3

Nichtfunktionale Anforderungen

2.4

Nachprüfbarkeit von Anforderungen

2.5

Zusammenhang zwischen Anforderungsanalyse und weiteren Entwicklungsphasen

3

Architektur

3.1

Beschreibung der Datenflüsse

3.2

Bedienen von Datenschnittstellen

3.3

Aufteilen der Software

3.4

Schichtenmodelle

3.5

Berücksichtigung vorhandener Softwaremodule

3.6

Test- und Überwachungsfunktionen

3.7

Bedingungen zum Starten und Anhalten von Modulen

3.8

Verwaltung gemeinsamer Ressourcen

3.9

Hardwarerelevante Themen

4

Design

4.1

Anpassung des Designs bei Wartung bestehender Embedded-Software

4.2

Softwaredesign bei Neuentwicklung von Embedded-Software

4.3

Anwendungsprogramme

4.4

Treiber

5

Implementierung

5.1

Werkzeuge

5.2

Anpassung der Implementierung bei Wartung bestehender Embedded-Software

5.3

Software-Implementierung bei Neuentwicklung von Embedded-Software

5.4

Umsetzung spezieller Entwurfsmethoden

5.5

Treiberimplementierung

5.6

Implementierungstipps

5.7

Codeanalyse

6

Test

6.1

Teststrategie

6.2

Modultest

6.3

Softwareintegration und Software-Integrationstest

6.4

Software-Anforderungstest

6.5

HW-/SW-Integration und HW-/SW-Integrationstest

6.6

Komponenten- und Systemtest

7

Ausblick

7.1

Aufgaben nach Ende eines Software-Entwicklungsprojekts

7.2

Trends im Embedded-Bereich

A

Abkürzungen

B

Begriffe

C

Links und Literatur

Index

1 Grundlagen

Zum besseren Verständnis der in den Folgekapiteln beschriebenen Themen und Problemlösungen werden hier notwendige Grundbegriffe erläutert.

Sie lernen Hardwarearchitekturen von Embedded-Systemen kennen und wie sie sich von einer PC-Architektur unterscheiden. Viel Neues erfahren Sie über den Umgang mit Echtzeitanforderungen an die Software, über hardwarenahe Software und robustes Design.

Die einzelnen Abschnitte sind in ihrer Reihenfolge so angeordnet, dass sie auf dem Wissen des Vorgängerabschnitts aufbauen. Sie können aber zum Nachschlagen und Vertiefen eines Themas auch dort direkt einsteigen. Behandelt werden dort:

  Hardwarearchitekturen

  Zeitverhalten

  Betriebssysteme

  Entwicklungsumgebungen

  Entwicklungsprozess

  Konfigurations- und Variantenmanagement

  Qualitätssicherung

  Sicherheit

  Dokumentation

1.1 Hardwarearchitekturen

Anhand einer Gegenüberstellung von typischen Embedded-Hardwarearchitekturen und Embedded-Anwendungen einerseits und der Hardwarearchitektur von sogenannten Mehrzweck-Computern (engl. »general purpose computer«) und ihren Anwendungen für Büro und Freizeit andererseits werde ich Ihnen im Folgenden anschaulich den Unterschied zwischen beiden Welten deutlich machen.

PC-Architektur

Anwendungen wie Browser, Tabellenkalkulationsprogramme oder Textverarbeitungssysteme laufen üblicherweise auf (teilweise mobilen) Geräten wie PCs und Laptops, die über Tastatur und Bildschirm bedient werden. Die Daten, die diese Anwendungen verarbeiten, und die Anwendungen selbst werden auf nichtflüchtigen Speichermedien wie Festplatten oder Flash mit Kapazitäten im Gigabyte-Bereich gespeichert. Der Datenaustausch mit anderen Rechnern erfolgt über ein Datennetz, entweder ein lokales Netzwerk (LAN), das Internet oder Datenträger, wie DVDs oder USB-Sticks. Und die Anwendungen selbst sind auf die Bedienung durch den Menschen zugeschnitten. Deshalb nimmt die Bedienerschnittstelle, besonders die Darstellung der Daten auf einem Bildschirm, breiten Raum ein (siehe Abb. 1–1).

Abb. 1–1
Typische Hardwarearchitektur eines Mehrzweck-Computers für Büroanwendungen (z.B. PC)

Embedded-Systeme

Embedded-Systeme werden, im Gegensatz zum Mehrzweck-Computer, für eine bestimmte Anwendung entworfen und programmiert. Ein Embedded-System ist oft Teil einer Maschine oder Anlage (wie etwa einer Waschmaschine, eines Autos oder Kernkraftwerks) und enthält meist neben der Computer-Hardware und der Embedded-Software auch elektromechanische Komponenten.

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!