1Einleitung
»Aus kleinem Anfang entspringen alle Dinge.«
(Marcus Tullius Cicero, 106 – 43 v. Chr.,
römischer Redner und Staatsmann)
1.1Warum gerade jetzt dieses Buch?
Die Beherrschung von Komplexität ist wohl die größte Engineering-Herausforderung des 21. Jahrhunderts. Software wird der Rohstoff sein, aus dem zukunftsfähige, smarte Systeme erschaffen werden. Software ist schon jetzt ein zentraler Bestandteil unserer Infrastruktur. Täglich kommen wir Menschen – mehr oder weniger bewusst – mit vielen Systemen in Kontakt, in denen Software zentrale Aufgaben übernimmt: Sei es der Fahrstuhl, die Klimaanlage, der Fahrkartenautomat oder das Auto.
Mit dem Internet der Dinge (Internet of Things, IoT) und der vierten industriellen Revolution, sprich: der Zukunftsvision »Industrie 4.0« der deutschen Bundesregierung, wird der Anteil und somit auch der Einfluss von Software auf alle Lebensbereiche des Menschen noch weiter zunehmen.
So wie die Metallverarbeitung eine Schlüsseltechnologie in der industriellen Revolution war, wird Software und Systems Engineering die Schlüsseltechnologie des Informationszeitalters sein.
Im Kontext von Embedded Systems werden sich obige Anforderungen besonders auswirken und modellgetriebene Entwicklung wird hier eine zentrale Rolle im Software und Systems Engineering für eingebettete Systeme einnehmen.
Eingebettete Systeme unterliegen wie jedes IT-System ständigen Innovationen. Moore's Law lässt grüßen. Es gibt jedoch innerhalb der Genesis solcher Systeme immer wieder Umwälzungen, die der scheinbar stetigen Entwicklung sprunghaften Charakter verleihen. Für den Betrachter scheint sich innerhalb kurzer Zeit alles zu ändern. Neue Programmiersprachen, mit denen die Entwickler konfrontiert werden, sind nur die Spitze des Eisbergs. Schaut man aus der heutigen Perspektive auf das Themengebiet Software Engineering zurück (siehe Abb. 1–1), kann die Entwicklung auf drei Umbrüche verdichtet werden.
Abb. 1–1Entwicklung von Software-Engineering-Paradigmen
- 1950er- bis 1960er-Jahre: Initialzustand, maschinennahe Programmierung, dominierende Programmiersprache ist Assembler und es gibt erste Hochsprachen, Programmierparadigma ist die Sprunganweisung, Visualisierung erfolgt mit Flussdiagrammen.
- 1970er-Jahre: Paradigmenwechsel zur Strukturierung (Funktionsorientierung), dominierende Programmiersprachen verzichten weitestgehend auf die Sprunganweisung, z. B. Pascal und C, Modularisierung, Funktionsbausteine sind zustandslos, Software Engineering erlebt Blütezeit und wird von vielfältigen strukturierten Darstellungstechniken wie strukturierter Analyse (SA), strukturiertem Design (SD), Nassi-Schneiderman-Diagrammen usw. dominiert, definierte Softwareprozesse orientieren sich am Wasserfallmodell.
- Ab 1990er-Jahre: Paradigmenwechsel zur Objektorientierung, dominierende Programmiersprachen sind z. B. C++ und Java, Softwarebausteine besitzen Zustände, Software Engineering erlebt einen Vereinheitlichungsprozess der objektorientierten Darstellungstechniken zur Unified Modeling Language (UML), definierte Softwareprozesse orientieren sich am Spiralmodell und werden agil.
Dieser stark verdichtete historische Abriss zeigt, dass der zunehmende Komplexitätsgrad an ausgewählten Punkten zu Paradigmenwechseln geführt hat. Es stellt sich die Frage, ob sich das auf eingebettete Systeme übertragen lässt?
Schaut man sich die dominierende Programmiersprache für eingebettete Systeme an, so stellen wir fest, dass sich C seit geraumer Zeit durchgesetzt hat. Nur noch wenige ausgewählte Aufgabenstellungen werden in Assembler realisiert.
Offensichtlich folgte man hier dem Paradigmenwechsel zur Strukturierung. Es lässt sich sogar eine Kenngröße ausmachen, an der man diesen Wechsel festmachen kann. Es ist die Programmgröße für eingebettete Systeme, die Größe des Programmspeichers. Ab 1 bis 16 Kilobyte Programmgröße wird es zunehmend schwieriger, die Aufgabenstellung in Assembler zu lösen. C wurde, obwohl hungriger nach Ressourcen, die adäquatere Programmiersprache für eingebettete Systeme.
Oberhalb der 16 Kilobyte wird nicht mehr ernsthaft darüber diskutiert, das System in Maschinensprache zu programmieren. Für den Paradigmenwechsel zur Objektorientierung lässt sich ebenfalls diese Kennzahl heranziehen. Dieser wurde vollzogen, als die typische Programmgröße deutlich die 1-Megabyte-Grenze überschritten hatte. Spätestens ab 4 Megabyte Hauptspeicher waren alle Diskussionen, ob PC-Programme in C programmiert werden sollen, erledigt. Objektorientierte Programmiersprachen wie C++ und Java haben sich innerhalb kurzer Zeit, zwischen 1990 und 1995, durchgesetzt. Heute verfügen selbst kleine Mikrocontroller wie die ARM-Cortex-M-Familie über mehr als 1 Megabyte Programmspeicher.
1.2Wie sollte man dieses Buch lesen?
Das Buch spannt einen weiten Bogen über das Fachgebiet der Entwicklung eingebetteter Systeme. Die Modellierung ist die Klammer, die die einzelnen Aspekte zusammenhält. Um das Fachgebiet als Ganzes zu verstehen, sollte das Buch kursorisch gelesen werden. Dabei können Details einzelner Aspekte auch übersprungen werden. Die Abschnitte sind in sich so weit abgeschlossen, dass eine zwingende Reihenfolge für die Bearbeitung nicht vorliegt. Für ausgewählte Leser sind einzelne Abschnitte von besonderem Interesse. Diese sollten intensiver studiert werden. Dafür sind im Anhang wichtige Erklärungen zu finden. Für die praktische Anwendung des Gelernten bietet die Webseite zum Buch unter www.mdese.de Werkzeuge, Beispiele und Tutorials an.
Studenten lernen das Fachgebiet Stück für Stück im Überblick kennen und werden für wichtige Aspekte sensibilisiert, deren Inhalte im Studium zu vertiefen sind. Zusammenhänge einzelner Disziplinen werden verstanden und die Möglichkeiten modellgetriebener Technologien können abgeschätzt werden. Dieses Buch ist auch als Nachschlagewerk geeignet.
Entscheider vertiefen ihr Beurteilungsvermögen und werden in die Lage versetzt, moderne modellgetriebene Technologien zu analysieren sowie qualifiziert zu bewerten.
Projektleiter erhalten wichtige Impulse zur Einführung von Modellierungstechniken. Das Verständnis der vorgestellten Technologien ist die Voraussetzung für deren Anwendung. In Kombination mit gesammelter Projekterfahrung gelingt es, für zukünftige Projekte eine neue Synthese mit modellgetriebenen Technologien zu erarbeiten.
Softwareentwickler verstehen den gesamten Prozess der modellgetriebenen Entwicklung und werden in die Lage versetzt, die für sie relevanten Technologien zu beurteilen und anzuwenden. Besonders modellgetriebene Realisierung und Test werden im Detail verstanden.
Hardwareentwickler lernen die Arbeitstechniken der Softwareentwickler kennen und sind in der Lage, mit diesen eine gemeinsame Sprache zu finden.
1.3Was ist an eingebetteten Systemen so besonders?
Eingebettete Systeme haben im Vergleich zu konventionellen Computern, wie unseren Desktop-PCs oder unseren Notebooks, geringe Ressourcen an Speicher und Rechengeschwindigkeit. Es gibt vielfältige Hardwarearchitekturen von 4 bis 64 Bit. Die verfügbaren Systeme bieten Single- und Multicore sowie sehr unterschiedliche Softwarearchitekturen von Bare-Metal-Programmierung über Real-Time Operation Systems bis Multitask/Multiuser-Betriebssysteme an.
Abb. 1–2Programmieradapter und Zielsystem
Der sinnliche Zugang wird für den Neueinsteiger dadurch erschwert, dass diese eingebetteten Digitalrechner als solche meist nicht zu erkennen, also quasi »unsichtbar« sind. Sie verfügen oft weder über gebräuchliche Eingabegeräte wie Maus und Tastatur noch über grafische Displays. Ein Taster und wenige LEDs bilden in vielen Fällen die einzige Mensch-Maschine-Schnittstelle.
Daher erfordert es auch ein spezielles Equipment für die Programmierung. Der Einsteiger muss sich ein Programmiergerät und wenn möglich Debugger-Hardware für das Zielsystem zulegen.
Zusätzlich sind eine spezielle Entwicklungsumgebung und Compiler nötig, die die gewünschte Hardware auch unterstützen. Die verfügbare Literatur ist entweder proprietär auf die Hardware- und Softwarearchitektur sowie die Entwicklungsumgebung des Chipherstellers fokussiert oder so allgemein gehalten, dass die konkrete Anwendung des Gelernten nur schwer möglich ist.
Von der breit angewendeten Softwaretechnologie im Mikrorechnerbereich ist der Biotop der eingebetteten Systeme eher abgeschnitten.
Abb....