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 Software­entwicklung 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 Software­entwicklung 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 Resourcen­verbrauch 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 25 Jahren, als C++ hauptsächlich zur Erstellung von GUI-Oberflächen verwendet wurde. Die Standards C++11/14 und C++17 haben einige Erweiterungen bekommen, die für den Einsatz in Embedded Systemen besonders geeignet sind. Wenn er erfolgreich sein möchte, muss der Software­entwickler dieser Veränderung des Einsatzes von C++ Rechnung tragen. In diesem Seminar werden ganz wesentlich Bereiche des Einsatzes von C++ in der Embedded Software­entwicklung behandelt. Insbesondere werden die Fragen des Laufzeit­verhaltens, 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++
  • Standard­datentypen
  • Strukturen
  • Operatoren
  • Funktionen
  • Zeiger und Referenzen
  • Dynamische Speicher­allokation
  • Klassenkonzept
  • Datenkapselung
  • Attribute und Methoden
  • Instanziierung von Objekten
  • Konstruktoren und Destruktoren
  • Funktions­überladung
  • Operator­überladung
  • Das C++ Namemangling
  • Typenkonvertierung
  • Sichtbarkeits­konzept
  • Vererbung
  • Polymorphie
  • Virtuelle Methoden
  • Abstrakte Klassen
  • Mehrfach­vererbung
  • Exception Handling
  • Templates
  • Funktions­templates
  • Klassen­templates
  • Speicherklassen in C++
  • Bedeutung von Heap und Stack
  • Die Speicher­verwaltung des Systems
  • Externe und statische Linkbarkeit
  • Die Rolle des Linkers für effizienten Code
  • Aufbau von C++ Projekten
  • Object Files und Bibliotheken
  • Das Zusammenspiel von Compiler und Linker
  • Dynamische Bibliotheken
  • Betrachtungen zum Laufzeit­verhalten
  • Sprachstandard und Compiler­verhalten
  • ANSI/ISO C++ 98/11/14/17
  • EC++
  • Der Aufbau der C++ Standard­bibliothek
  • .. 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 bieten die Standards C++11/14 und C++17 für die Embedded Entwicklung?
  • Welche Auswirkungen haben unter­schiedliche Speicher­verwaltungs­strategien für Applikations­daten auf das Gesamt­system?
  • Welche praktischen Auswirkungen haben physikalische und virtuelle Speicher­verwaltung auf das Design von Software?
  • Was bedeutet Speicher­fragmentierung und wie beherrscht man Probleme damit?
  • Welche Auswirkungen hat der Einsatz von Polymorphie auf Laufzeit und Größe des Programm­codes?
  • Wie können Templates eingesetzt werden?
  • Welche Laufzeit­aspekte 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 Rahmen­bedingungen gelten für die Entwicklung neben­lä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 Rahmen­bedingungen 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 05.08.2025