Embedded C++ und MISRA C++ 2023

Inhalte Verbergen

Inhalte „Embedded C++ und MISRA C++ 2023“

Die Inhalte dieses Kurses werden derzeit auf die im Oktober 2023 erschienenen Misra C++ 2023 Guidelines aktualisiert

Embedded Programme sind oft durch besondere Anforderungen gekennzeichnet. Sie haben oft nur wenig Speicher, zur Vermeidung einer Speicherfragmentierung darf kein Heap verwendet werden, sie müssen schnell und zuverlässig sein, usw. Diese Anforderungen werden oft in Regeln zusammengefaßt, wie z.B. den aus der Automobilindustrie stammenden AUTOSAR und MISRA Rules. Die für C++ zulässigen Sprachelemente werden auch als Embedded C++ bezeichnet.

Im März 2017 hat AUTOSAR „guidelines for the use of the C++14 language in critical and safety-related systems“ vorgestellt. Diese Regeln sind im Wesentlichen eine Aktualisierung der MISRA C++ Regeln von 2008 (auf der Basis des inzwischen veralteten C++03) auf den Stand von C++ 14, die bei vielen embedded C++ Anwendungen eingehalten werden müssen.

Da sich viele dieser Regeln auf Sprachelemente von C++11 und C++14 beziehen, werden diese Sprachelemente in diesem Seminar ausführlich vorgestellt.

Die Entwicklung der AUTOSAR Regeln ist aber noch nicht abgeschlossen: 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.

1. MISRA und AUTOSAR C++14

  1. Die Zielsetzung von AUTOSAR C++14
  2. Erlaubte C++-Funktionen in AUTOSAR C++14

2. Elementare Datentypen und Anweisungen – C++ vs C

2.1 Ganzzahl-Datentypen

  • Ganzzahl-Typen mit fester Breite
  • Trennzeichen für Zahlenliterale, binäre Literale
  • Typ-Ableitungen: Implizite Typzuweisungen mit auto
  • Implizite Konvertierungen und sichere Konvertierungen mit Initialisierungslisten
  • std::byte

2.2 Kontrollstrukturen und Funktionen

  • Bedingte Anweisungen und Schleifen
  • Initialisierungen in for if/switch
  • Funktionen
  • Bedingte Kompilation mit if constexpr
  • Wert- und Referenzparameter
  • Bibliotheken und namespaces verwenden
  • Default Argumente

2.3 Gleitkomma-Datentypen

2.4 Konstanten

  • Laufzeitkonstanten mit const
  • Compilezeit Konstanten mit constexpr
  • constexpr Funktionen
  • static_assert und unit tests zur Compilezeit

2.5 Synonyme für Datentypen mit typedef und using

2.6 Überladene Funktionen

  • Überladene Operatoren mit globalen Operatorfunktionen
  • Benutzerdefinierte Literale

2.7 Reihenfolge der Auswertung in Ausdrücken seit C++17

2.8 Aufzählungstypen

  • Schwach typisierte Aufzählungstypen (C/C++03)
  • enum Konstanten und Konversionen
  • Stark typisierte Aufzählungstypen (C++11)

2.9 Attribute

2.10 Der Visual Studio C++ Core Guidelines Checker

2.11 Module (C++20)

  • Die Standardbibliothek als Modul verwenden
  • Module definieren

3. String-Klassen: string, wstring etc.

  • Elementfunktionen der string Klasse
  • Raw string Literale
  • C++11 String-Konversionsfunktionen to_string, stoi usw.
  • C++17 String-Konversionsfunktionen: to_chars und from_chars
  • string_view – Strings zum Anschauen

4. Arrays und Container

  • Arrays im Stil von C
  • C++ Arrays: std::array
  • Dynamische Arrays des Typs std::vector
  • Die Initialisierung von Arrays bei ihrer Definition
  • Vorteile von std::array und std::vector gegenüber Arrays im Stil von C

5. Pointer und Smart Pointer

  1. AUTOSAR 6.18.5: Dynamische Speicherverwaltung
  2. Das nullptr Literal
  3. Pointer Konversionen
  4. C++11 Smart Pointer: shared_ptr, unique_ptr und weak_ptr
  5. Gemeinsamkeiten von unique_ptr und shared_ptr
  6. unique_ptr
  7. shared_ptr
  8. Deleter und smart pointer für Arrays

6. Objektorientierte Programmierung

Klassen, Datenelemente und Elementfunktionen

  • Datenkapselung: Die Zugriffsrechte private und public
  • Konstruktoren und Destruktoren
  • Initialisierungslisten für Argumente und Rückgabewerte
  • Initialisierungslisten als Parameters
  • Der Standardkonstruktor
  • Elementinitialisierer
  • Überladene Operatoren mit Elementfunktionen
  • Der Kopierkonstruktor und der Zuweisungsoperator
  • Explizit deleted und defaulted Funktionen mit =delete und =default
  • Konvertierende und explizite Konstruktoren
  • Static Klassenelemente
  • inline Variablen, vor allem static inline Datenelemente
  • Konstante Objekte und Elementfunktionen

Vererbung und Komposition

  • Konversionen zwischen public abgeleiteten Klassen
  • Mehrfachvererbung
  • Virtuelle Funktionen, späte Bindung und Polymorphie
  • Virtuelle Funktionen mit override in C++11
  • Rein virtuelle Funktionen und abstrakte Basisklassen
  • Interfaces und Mehrfachvererbung

R-Wert Referenzen und Move Semantik

7. namespaces

8. Exception Handling

  • try / catch und stack unwinding
  • RAII
  • noexcept

9. Templates

Generische Funktionen: Funktions-Templates

  • Die Deklaration von Funktions-Templates
  • Spezialisierungen von Funktions-Templates
  • Funktions-Templates mit Nicht-Typ Parametern
  • Explizit spezialisierte und überladene Templates

Generische Klassen: Klassen-Templates

  • Die Deklaration von Klassen-Templates
  • Spezialisierungen von Klassen-Templates
  • Klassen-Templates mit Nicht-Typ Parametern

10. Funktoren, Functionsobjekte und Lambda Ausdrücke

Der Aufrufoperator ()

Lambda-Ausdrücke

STL Algorithmen und Lambda Ausdrücke

  • Linear Suchen, Zählen
  • Suche nach Teilfolgen
  • Mit all_of, any_of, none_of alle Elemente in einem Bereich prüfen
  • Elemente transformieren und ersetzen
  • Sortieren
  • Binäre Suche in sortierten Containern
  • Parallele Algorithmen der STL, z.B. std::sort
  • Parallel for mit for_each
  • std::reduce und std::transform_reduce 

11. Polymorphe Memory Resourcen (pmr), STL Container und AUTOSAR C++14

Die Standard Allokatoren der STL Container

Tracking new und delete

Allokatoren und polymorphe memory Resourcen

  • Container mit einer monotonic_buffer_resource auf dem Stack oder global
  • Benchmarks: pmr-Container sind oft deutlich schneller
  • Allokatoren in C++17

Über „Embedded C++ und AUTOSAR C++ 14“

Zielgruppe

Software-Entwickler, die professionelle Programme für embedded Anwendungen mit C++ schreiben und dabei die AUTOSAR Regeln beachten wollen.

Vorkenntnisse: Gute C++-Kenntnisse.

Sprache: Deutsch oder Englisch

Unterrichtsstil

Vortrag mit vielen Beispielen, die das Wesentliche auf den Punkt bringen. Dabei wird auf einen ausgewogenes Verhältnis von Theorie und Praxis geachtet.

  • Zu Beginn eines neuen Themas wird zunächst ein Überblick über die Einsatzmöglichkeiten, Grundideen und die Syntax gegeben. Diese werden an sorgfältig ausgewählten und bewährten Beispielen illustriert.
  • Das Verständnis wird oft durch den Vergleich ähnlicher (auch älterer) Sprachelemente und ihrer Vor- und Nachteile vertieft. Dabei werden oft „best practises“ empfohlen.
  • Falls die Teilnehmer ihr Wissen selbständig vertiefen wollen: Das Manuskript enthält zahlreiche praxisnahe Übungsaufgaben. Auf Wunsch können nach vorheriger Absprache auch Aufgaben aus der Arbeit der Seminarteilnehmer behandelt werden.

Falls sich im Lauf des Seminars  zeigt, dass Grundlagen bei den Teilnehmern fehlen oder weitere Themen gewünscht werden, kann die Agenda auch noch während des Seminars an die Wünsche der Teilnehmer angepasst werden.

Schulungsunterlagen

Ausführliche und detaillierte Schulungsunterlagen (ca. 200 Seiten) – Vollständiger Text, keine Powerpoint Folien, die nur Stichworte enthalten. Deshalb können die Kursunterlagen auch als Referenz bei der Arbeit verwendet werden.

Ort und Zeit, Online oder Präsenz

Dieses Seminar wird als Firmenseminar (inhouse) angeboten. Die Durchführung als Präsenzseminar wird bevorzugt, ist aber auch als Online-Seminar möglich. Termine nach Vereinbarung.

Dauer: 5 Tage

Öffentliche Seminare von Prof. Richard Kaiser finden Sie bei der Technischen Akademie Esslingen.

Dozent:

Prof. Richard Kaiser führt seit vielen Jahren Seminare für Firmen durch, vor allem über Software-Entwicklung und die Programmiersprachen C#, C++ und C. Er kennt die Anforderungen der Praxis und geht sowohl in den grundlegenden Konzepten als auch in den Einzelheiten detailliert darauf ein. Zu seinen Kunden gehören renommierte Weltkonzerne und kleine und mittelständische Unternehmen. Er ist der Verfasser mehrerer Bücher über C++, zuletzt „C++ mit Visual Studio 2019“. Er war viele Jahre Mitglied im DIN Normierungsausschuss Informationstechnik NI-22.

 

Kontakt Prof. Richard Kaiser