Seminar: Embedded C++ und AUTOSAR C++ 14

Diese Beschreibung ist noch vorläufig und wird noch überarbeitet.

In diesem Seminar werden die Sprachelemente von C++ (insbesondere C++11, C++14 und C++17) unter dem Gesichtspunkt der besonderen embedded Anforderungen zusammen mit den AUTOSAR C++14 Regeln vorgestellt. Diese Regeln sind eine Weiterentwicklung der Misra C++ Regeln von 2008. Im Januar 2019 hat Misra angekündigt, dass die Misra C++ und die Autosar Regeln zu einem gemeinsamen Regelwerk auf der Basis von C++17 zusammengefasst werden sollen.

In diesem Seminar werden die Sprachelemente von C++ unter dem Gesichtspunkt der besonderen embedded Anforderungen vorgestellt und mit C-Alternativen verglichen.

Ziel des Seminars:

Embedded Programme sind oft durch besondere Einschränkungen gekennzeichnet, wie z.B. kleiner Speicher, keinen Heap verwenden (zur Vermeidung einer Speicherfragmentierung) usw. Dazu kommen oft besondere wie Anforderungen wie hohe Geschwindigkeit, hohe Zuverlässigkeit usw.

Traditionellerweise werden embedded Programme oft in C geschrieben. Mit modernen C++-Compilern haben die meisten Sprachelemente heute keine Nachteile mehr gegenüber C. Durch die neuen C++-Standards wurden neue Sprachelemente in C++ aufgenommen, die zu schnellerem und kleinerem Code führen als die C-Alternativen.

Eines der wichtigsten Argumente für C++ ist aber, dass embedded Programme immer komplexer und größer werden. Diese Komplexität ist mit den Mitteln von C oft nur noch schwer zu bewältigen. Hier bietet C++ Vorteile, die Entwicklungskosten sparen und zur Zuverlässigkeit der Anwendungen beitragen.

Ein Schwerpunkt dieses Seminars liegt auf C++-Konzepten, die keine direkte Entsprechung in C haben. Diese werden anhand der AUTOSAR C++14 Regeln ausführlich besprochen.

Voraussetzung: Gute C- und C++-Kenntnisse –dieser Kurs ist keine Einführung in C++.

Inhalte (noch vorläufig, wird noch überarbeitet)

  • Elementare Datentypen und Anweisungen
    • Ganzzahldatentypen fester Breite
    • Trennzeichen bei Zahlliteralen und binäre Literale
    • Stark typisierte Aufzählungstypen
    • Typ-Inferenz: Implizite Typzuweisungen mit auto
    • Sichere Konversionen mit Initialisierlisten
    • inline Variablen, insbesondere static inline Datenelemente
    • Konstanten mit const und constexpr
    • Init statement für if/switch
    • Bedingte Kompilation mit if constexpr
    • Arrays und std::array
  • Namespaces
  • Überladene Funktionen und Operatoren
  • Klassen
    • Elementfunktionen und der this-Zeiger
    • Datenkapselung
    • Konstruktoren und Destruktoren
    • Elementinitialisierer
    • Standardkonstruktor, Kopierkonstruktor, Zuweisungsoperator
    • Die Angaben =delete und =default
    • Vererbung und Komposition
    • Virtuelle Funktionen und Polymorphie
    • R-Wert Referenzen und Move-Semantik
  • Exception-Handling
    • try/catch und stack unwinding
    • RAII
    • noexcept
  • Funktoren, Funktionsobjekte und Lambda-Ausdrücke
  • Templates
    • Funktions-Templates
    • Klassen-Templates
  • Die C++-Standardbibliothek
    • Die STL und die Embedded Template Library etl
    • std::vector und std::array
    • Sequentielle und assoziative Container
    • Algorithmen und parallele Algorithmen
    • Polymorphie ohne Zeiger: std::visit und std::variant
    • Optionale Rückgabewerte mit std::optional