Embedded C++ Aufbaukurs

Inhalt

Embedded Programme sind oft durch besondere Anforderungen gekennzeichnet. Sie haben oft eine spezielle Programmstruktur (setup, loop), zur Vermeidung einer Speicherfragmentierung darf kein Heap verwendet werden, sie müssen auf Interrupts reagieren, Anforderungen wie die MISRA oder AUTOSAR Guidelines einhalten, usw.

Traditionellerweise werden embedded Programme oft in C geschrieben. Mit der Weiterentwicklung der Compiler haben die meisten Sprachelemente von C++ heute in Bezug auf Codegröße und Geschwindigkeit keine Nachteile mehr gegenüber C.

  • In die neuen C++-Standards (C++11, C++14, C++17, C++20 und C++23) wurden neue Sprachelemente 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++ enorme Vorteile, die Entwicklungskosten sparen und zur Zuverlässigkeit der Anwendungen beitragen.
  • Praktisch alle Compiler für embedded Programme (Espressif, STM32CubeIDE, Arduino usw.) unterstützen die neuen C++-Standards.

Ziele des Seminars: In diesem Embedded C++ Aufbaukurs werden weiterführende Sprachelemente und -konzepte von C++ vorgestellt, wie z.B. Templates, Lambda-Ausdrücke, die Standardbibliothek, Container, pmr-Container und Multithreading. Dabei stehen die neuen Sprachelemente von C++11C++14 und C++17 und ihre Einsatzmöglichkeiten für embedded Systeme im Vordergrund. Zahlreiche Beispiele zeigen ihre Einsatzmöglichkeit für gängige Mikrocontroller Boards (STM32, ESP32, Arduino, Rasperry Pi usw.). Zusammen mit den Sprachelementen werden auch die AUTOSAR C++14 und MISRA Regeln für sicherheitsrelevante Systeme vorgestellt.

1. Embedded Systeme

  • Einsatzbereiche und Besonderheiten
  • Spezielle Anforderungen bei embedded Anwendungen
  • C und C++ im Vergleich
  • ESP32- und STM32-Boards

2. namespaces

  • Die Definition und Verwendung von Namensbereichen

3. Exception-Handling

  • try, catch, throw und stack unwinding
  • Exceptions in der Standardbibliothek
  • Die Freigabe von Ressourcen bei Exceptions (RAII)
  • noexcept

4. Container der Standardbibliothek

  • vector, sequentielle Container, Iteratoren
  • Die bereichsbasierte for-Schleife
  • Assoziative Container (set, map, multimap und Hash-Container)
  • Zusammenfassungen von Datentypen (pair, tuple)
  • std::optional und std::variant, Zustandsautomaten

5. Templates

  • Funktions-Templates und Spezialisierungen
  • Nicht-Typ-Parameter
  • Rekursive Funktions-Templates und Variadische Templates
  • Klassen-Templates
  • Type Traits
  • Typ-Inferenz
  • Concepts

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

  • Die Standard Allokatoren der STL Container
  • Tracking new und delete
  • pmr-Allokatoren und polymorphe memory Resourcen
  • Container mit einer monotonic_buffer_resource
  • Benchmarks: pmr-Container sind oft deutlich schneller
  • Allokatoren in C++17

7. Funktoren und Lambda-Ausdrücke

  • Der Aufrufoperator ()
  • Lambda-Ausdrücke

8. 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 

9. Dateibearbeitung mit den Streamklassen

10. Zeiten und Kalenderdaten mit std::chrono

11. Multithreading

  • Funktionen mit Lambda-Ausdrücken als thread starten
  • future und promise
  • Kritische Abschnitte

12. Zeiger und Smart Pointer

  • Schwächen von Zeigern im Stil von C
  • Gemeinsamkeiten von shared_ptr und unique_ptr
  • shared_ptr
  • unique_ptr

Über den „Embedded C++ Aufbaukurs“

Zielgruppe

Software-Entwickler, die professionelle Programme für embedded Anwendungen mit C++ schreiben wollen. Dieser Kurs ist vor allem für erfahrene embedded C-Programmierer konzipiert, die auf C++ umsteigen wollen.

Voraussetzungen: Gute C++ Kenntnisse im Umfang des Embedded C++ Grundkurs.

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

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.

Der 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