Seminar zur C++ Entwicklung im Embedded System

Der Kurs setzt ein Grundverständnis von C++ voraus und geht auf die Besonderheiten der Sprache für die Embedded Softwareentwicklung ein. C++ wird immer mehr aus den klassischen Bereichen der Softwareentwicklung verdrängt. In der Entwicklung von Anwendungssoftware und Serverdiensten haben Java & Co. die Sprache C++ inzwischen weit überrundet. Auch die Technologieführerschaft in der Objektorientierten Softwareentwicklung hat inzwischen Java inne. Auf der anderen Seite lassen sich aus diversen Gründen diese neuen Sprachen in vielen Bereichen der Embedded Entwicklung nicht einsetzen. Eine wesentliche Ursache ist das Fehlen eines deterministischen Laufzeitverhaltens. Weitere Gründe sind der enorme Resourcenverbrauch und das ungünstige Hochstartverhalten von Java-Applikationen. Den Determinismus teilt C++ mit C - der klassischen Sprache der Systementwicklung und Embedded Programmierung. Im Resourcenbedarf und im Aufstartverhalten lassen sich C++-Programme ebenso effizient wie C-Programme gestalten. Der Entwicklung leistungsfähiger Hardware und flexibler Compiler - allen voran GCC - ist es zu danken, dass C++ immer mehr in die Domäne von C einbricht. C++ verschwindet also nicht vom Markt, sondern erlebt in der eingebetteten Programmierung eine Renaissance. Der Einsatz von C++ in der Industrie steht heute auf einer breiteren technologischen Grundlage als noch vor zwanzig Jahren, als C++ hauptsächlich zur Erstellung von GUI-Oberflächen verwendet wurde. Wenn er erfolgreich sein möchte, muss der Softwareentwickler dieser Veränderung des Einsatzes von C++ Rechnung tragen. In diesem Seminar werden ganz wesentlich Bereiche des Einsatzes von C++ in der Embedded Softwareentwicklung behandelt. Insbesondere werden die Fragen des Laufzeitverhaltens, des Footprints und der Code-Coverage von C++-Code gestellt.

Die folgenden Themen werden durchgenommen:

  • Historische Entwicklung von C++
  • Grundlegende Syntax
  • Kennenlernen des Compilers und Linkers
  • Die Anteile der Sprache C in C++
  • Standarddatentypen
  • Strukturen
  • Operatoren
  • Funktionen
  • Zeiger und Referenzen
  • Dynamische Speicherallokation
  • Klassenkonzept
  • Datenkapselung
  • Attribute und Methoden
  • Instantiierung von Objekten
  • Konstruktoren und Destruktoren
  • Funktionsüberladung
  • Operatorüberladung
  • Das C++ Namemangling
  • Typenkonvertierung
  • Sichtbarkeitskonzept
  • Vererbung
  • Polymorphie
  • Virtuelle Methoden
  • Abstrakte Klassen
  • Mehrfachvererbung
  • Exception Handling
  • Templates
  • Funktionstemplates
  • Klassentemplates
  • Speicherklassen in C++
  • Bedeutung von Heap und Stack
  • Die Speicherverwaltung des Systems
  • Externe und statische Linkbarkeit
  • Die Rolle des Linkers für effizienten Code
  • Das Zusammenspiel von Compiler und Linker
  • Aufbau von C++ Projekten
  • Object Files und Bibliotheken
  • Das Zusammenspiel von Compiler und Linker
  • Dynamische Bibliotheken
  • Betrachtungen zum Laufzeitverhalten
  • Sprachstandard und Compilerverhalten
  • ANSI/ISO C++ 98/11/14/17
  • EC++
  • Der Aufbau der C++ Standardbibliothek
  • .. und weitere

Es werden die folgenden Fragestellungen behandelt:

  • Wie verhält sich C++ im Vergleich zu C im Embedded System?
  • Welche Entscheidungen fällt der ANSI-C++ Standard für die Embedded Entwicklung?
  • Welche grundsätzlichen Fehler kann man beim Einsatz von C++ machen?
  • Welche Lösungen bietet der EC++ Standard?
  • Welche Auswirkungen haben unterschiedliche Speicherverwaltungsstrategien für Applikationsdaten auf das Gesamtsystem?
  • Welche praktischen Auswirkungen haben physikalische und virtuelle Speicherverwaltung auf das Design von Software?
  • Was bedeutet Speicherfragmentierung und wie beherrscht man Probleme damit?
  • Welche Auswirkungen hat der Einsatz von Polymorphie auf Laufzeit und Größe des Programmcodes?
  • Wie können Templates eingesetzt werden?
  • Welche Laufzeitaspekte sind bei der Verwendung der Standard Template Library zu beachten?
  • Wie kann Exception Handling im Embedded System eingesetzt werden?
  • Welche Auswirkungen hat Exception Handling auf Laufzeit, Footprint und Codestruktur?
  • Welche Rahmenbedingungen gelten für die Entwicklung nebenläufiger Systeme?
  • Was bedeutet Tracing und Logging für das zeitliche Verhalten?

Es kann ein beliebiger ANSI/ISO C++ Compiler eingesetzt werden - vorzugsweise GCC C++. Je nach Bedarf können Übungen direkt auf einem Embedded System ausgeführt werden. Dafür gibt es unterschiedliche Lösungen von der echten Hardware bis zur Simulation. Wenn ein spezielles System zum Einsatz gebracht werden soll, müssen die Rahmenbedingungen und die Machbarkeit vor dem Kurs noch abgesprochen werden. Sehr gerne setze ich QNX und Embedded Linux ein. Der Kurs kann auch mit Beispielen durchgeführt werden die man auf PCs unter Windows, Linux oder Mac OS X zum Laufen bringt.

Zuletzt geändert am 10.07.2021