Embedded C++17 Grundkurs
Dieser praxisorientierte Inhouse-Kurs richtet sich an Entwickler in Unternehmen, die den Umstieg von C oder älteren C++-Versionen auf C++17 planen und dabei die neuesten Werkzeuge und Best Practices kennenlernen möchten.
Dieser Grundkurs deckt zusammen mit dem Embedded C++ Aufbaukurs alle Themen ab, die für die Programmierung von embedded Anwendungen mit C++ wichtig sind.
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 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) wurden neue Sprachelemente aufgenommen, die zu schnellerem und kompakterem 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 toolchains und Entwicklungsumgebungen für embedded Programme (STM32CubeIDE, Espressif, usw.) unterstützen inzwischen C++17.
- Auch die früher vor allem C-orientierten MISRA Guidelines weisen auf die Vorteile von C++ hin: „… now C++ is in the position once held by “C”;“
- Zusätzlich wird ein Ausblick auf die wichtigsten Neuerungen in C++20 und C++23 gegeben, die in den nächsten gcc toolchains bald zur Verfügung stehen werden.
- Zusammen mit den Sprachelementen werden auch die MISRA C++ 2023 Guidelines für sicherheitsrelevante Systeme und die C++ Core Guidelines vorgestellt. Die Einhaltung dieser best practises wird oft empfohlen oder verlangt, um sicheren, wartbaren und leistungsfähigen C++-Code zu erhalten.
Ziele des Seminars
In diesem Embedded C++ Grundkurs werden die grundlegende Sprachelemente und -konzepte von C++ (z.B. Datentypen, Anweisungen, objektorientierte Programmierung) auf dem aktuellen Stand von C++11, C++14 und C++17 ausführlich vorgestellt. Zahlreiche Beispiele für gängige Mikrocontroller (STM32, ESP32, Raspberry Pi usw.) zeigen ihre Einsatzmöglichkeiten für embedded Systeme.
Zielgruppe
Dieser Kurs richtet sich an
- erfahrene Entwickler, die Embedded Anwendungen nach dem aktuellen Stand der Technik in C++17 schreiben möchten. Außerdem an
- Entscheidungsträger und Technologiemanager (Technische Leiter, Projektmanager usw.), die bewerten möchten, wie C++17 die Entwicklungsprozesse ihrer Teams optimieren kann.
Er wird oft als inhouse-Seminar durchgeführt, damit Firmen ihre Teams gemeinsam auf den neuesten Stand bringen können. Offene Seminare finden an der TAE (Technische Akademie Esslingen) statt.
Typische Anwendungsbereiche:
- Automotive, Luft- und Raumfahrt: Entwickler, die hohe Anforderungen an Sicherheit und Zuverlässigkeit einhalten müssen.
- Industrieautomation: Programmierer von komplexen Steuerungs- und Überwachungssystemen.
- IoT und Smart Devices: Entwickler, die für moderne IoT-Geräte arbeiten, bei denen Speicher- und Leistungsoptimierungen entscheidend sind.
- Medizintechnik: Ingenieure, die sicherheitsrelevante und ressourcenschonende Software für medizinische Geräte entwickeln.
Voraussetzungen: Gute C Kenntnisse.
Inhalte
Die Inhalte dieses Kurses (hier ausführlich) können nach Absprache auf die besonderen Wünsche der Teilnehmer angepasst werden.
1. Embedded Systeme
- Einsatzbereiche und Besonderheiten
- Spezielle Anforderungen bei Embedded Anwendungen
- Überblick: C und C++ im Vergleich
- ESP32- und STM32-Boards
2. Elementare Datentypen und Anweisungen
2.1 Ganzzahl- und Gleitkomma Datentypen
- Ganzzahldatentypen mit fester Breite
- Trennzeichen für Zahlenliterale, binäre Literale
- Typ-Ableitungen: Implizite Typzuweisungen mit auto
- Initialisierungen und implizite Konversionen
- Typsichere Initialisierungen mit Initialisierungslisten
- Bitoperationen
2.2 Kontrollstrukturen und Funktionen
- Bedingte Anweisungen und Schleifen
- Initialisierungen in for if/switch
- Funktionen
- Interrupts und Interrupt Service Routinen (ISR)
- Wert- und Referenzparameter
- Die Verwendung von C- und C++-Bibliotheken, namespaces
- Default Argumente
- Funktionszeiger und Interrupt-Funktionen (Interrupt Service Handler -ISR)
2.3 Konstanten
- Laufzeitkonstanten mit const
- Compilezeit Konstanten mit constexpr
- constexpr Funktionen
- static_assert und Unittests zur Compilezeit
2.4 Überladene Funktionen und Operatoren
- Überladene Operatoren mit globalen Operatorfunktionen
- Mit überladenen new– und delete-Operatoren memory-leaks finden
- Benutzerdefinierte Literale
2.5 Aufzählungstypen
- Schwach typisierte Aufzählungstypen (C/C++03)
- enum Konstanten und Konversionen
- Stark typisierte Aufzählungstypen (C++11)
- Zustandsautomaten
- Task Scheduling
2.6 Attribute
2.7 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
- C++20: std::format
4. Arrays und Container
- Arrays im Stil von C
- C++ Arrays: std::array
- Dynamische Arrays mit std::vector
- Vorteile von std::array und std::vector gegenüber Arrays im Stil von C
5. Pointer und Smart Pointer
- Dynamische Speicherverwaltung
- Das nullptr Literal
- Pointer Konversionen
- Smart Pointer: shared_ptr, unique_ptr und weak_ptr
6. Objektorientierte Programmierung
6.1 Klassen, Datenelemente und Elementfunktionen
- Datenkapselung: Die Zugriffsrechte private und public
- Konstruktoren und Destruktoren
- Klassen ohne Zeiger, RAII und die Rule of Zero
- Initialisierungslisten als Parameter, für Argumente und Rückgabewerte
- 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
6.2 Vererbung und Komposition
- Konversionen zwischen public abgeleiteten Klassen
- verdeckte Elemente
- Mehrfachvererbung
- Virtuelle Funktionen, späte Bindung und Polymorphie
- Virtuelle Funktionen mit override in C++11
- Rein virtuelle Funktionen und abstrakte Basisklassen
- Interfaces und Mehrfachvererbung
6.3 R-Wert Referenzen und Move Semantik
- Move-Semantik in der C++-Standardbibliothek
- Move-Semantik für Rule of Zero Klassen
- Move-Semantik für eigene Klassen
Über den „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: 4-5 Tage (je nach Vorkenntnissen)
Ö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.