
C++17 Grundlagen für Embedded Systeme
Dieses Training für professionelle Entwickler von embedded Systemen behandelt die Grundlagen und die objektorientierte Programmierung. Zusammen mit dem Aufbaukurs Modernes C++ für Embedded Systeme werden alle Themen abgedeckt, die für die Programmierung von embedded Anwendungen mit modernem C++ wichtig sind.
Dieser Kurs richtet sich an alle, die die Vorteile von modernem C++ nutzen wollen. Das können Entwickler sein, die schon lange mit C++ arbeiten und einen Überblick über die Fülle der neuen Features suchen. Oder auch C Programmierer, die auf C++ umsteigen wollen.
Dabei wird an vielen praxisnahen Beispielen gezeigt, welche Vorteile modernes C++ bei embedded Projekten hat und wie diese eingesetzt werden können. Die meisten Beispiele und Übungen stehen als browserbasierte Projekte für STM32, ESP32 und Raspberry Pi über den Wokwi-Simulator zur Verfügung:
Embedded C++ Beispiele als Wokwi Projekte
Bei diesem Kurs stehen die besonderen Anforderungen an Embedded Programme im Mittelpunkt: Sie haben oft eine spezielle Programmstruktur, müssen Hardware ansprechen (z.B. Digital- oder Analog-IO), 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 oder älteren Versionen von C++ geschrieben. Damit werden aber die Vorteile des modernen C++ verschenkt:
- In das moderne C++ (C++11, C++14, C++17 usw.) wurden neue Sprachelemente aufgenommen, die zu schnellerem und kompakterem Code führen als die C-Alternativen.
- Das wichtigste Argument ist aber, dass embedded Programme immer komplexer und größer werden. Zur Bewältigung dieser Komplexität bietet modernes C++ enorme Vorteile, die Entwicklungskosten sparen und zur Zuverlässigkeit der Anwendungen beitragen.
Heute unterstützen praktisch alle toolchains und Entwicklungsumgebungen für embedded Programme (STM32CubeIDE, Espressif, usw.) C++17. Damit können Sie von den Vorteilen des modernen C++ profitieren.
Die MISRA C++ 2023 Guidelines
Zusammen mit den Sprachelementen werden die MISRA C++ 2023 Guidelines für sicherheitsrelevante Systeme und die C++ Core Guidelines vorgestellt. Die Einhaltung dieser bewährten Praktiken 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 grundlegenden Sprachelemente und -konzepte von C++ (Datentypen, Anweisungen, objektorientierte Programmierung) auf dem aktuellen Stand von 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.
Zusätzlich wird ein Ausblick auf die wichtigsten Neuerungen in C++20 und C++23 gegeben, die in den nächsten Versionen der gcc toolchains (hoffentlich bald) zur Verfügung stehen werden.
Zielgruppe
Dieser Kurs richtet sich an
- erfahrene Entwickler, die bei ihren embedded Anwendungen die Vorteile des aktuellen Stands von C++ nutzen möchten. Dabei ist es unerheblich, ob Sie bisher C oder ältere Versionen von C++ einsetzen.
- Entscheidungsträger und Technologiemanager (Technische Leiter, Projektmanager usw.), die bewerten möchten, wie modernes C++17 die Produktivität ihrer Teams und die Qualität der Software steigern 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
- Typische Einsatzbereiche
- Spezielle Anforderungen bei Embedded Anwendungen
- Mikrocontroller (z.B. STM32, ESP32 usw.)
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
- Wert- und Referenzparameter
- Die Verwendung von C- und C++-Bibliotheken, namespaces
- Default Argumente
- Unittests
- Funktionszeiger, Interrupts und Interrupt Service Routinen (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
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
- Die bereichsbasierte for-Schleife
- Container mit einem beliebigen Index-Typ: std::map
- Kooperatives Multitasking und tabellengesteuerte Zustandsautomaten
5. Pointer und Smart Pointer
- Dynamische Speicherverwaltung
- Pointer Konversionen
- Smart Pointer: shared_ptr und unique_ptr
- Ein new/delete-tracker für memory leaks
6. Objektorientierte Programmierung für Embedded Systeme
6.1 Klassen
- Datenkapselung
- Konstruktoren, Destruktoren und RAII
- Klassen ohne Zeiger und die Rule of Zero
- Initialisierungslisten als Parameter, für Argumente und Rückgabewerte
6.2 Klassendesign: Sichere und wartbare Klassen
- Der Standardkonstruktor
- Elementinitialisierer
- Überladene Operatoren mit Elementfunktionen
- Der Kopierkonstruktor und der Zuweisungsoperator
- =delete und =default für Elementfunktionen
- Konvertierende und explizite Konstruktoren
- Static Klassenelemente und static inline Datenelemente
- Konstante Objekte und Elementfunktionen
- Klassen für Digital- und Analog-I/O
- Unittests und Mocking
- benutzerdefinierte Literale für typsichere Werte
6.3 Vererbung und Komposition
- Konversionen zwischen abgeleiteten Klassen
- Verdeckte Elemente
- Mehrfachvererbung
- Virtuelle Funktionen, späte Bindung und Polymorphie
- Rein virtuelle Funktionen und abstrakte Basisklassen
- Interface-Klassen und Mehrfachvererbung
6.4 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 Grundkurs „Modernes C++ für Embedded Systeme“
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.
- Die Themen werden durch einen Überblick über die Grundideen und die Einsatzmöglichkeiten dargestellt und 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.
- Für Teilnehmer, die ihr Wissen selbständig vertiefen wollen, enthält das Manuskript 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äsenzschulung wird empfohlen. Online-Kurse sind auch 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++ und C sowie C#. Er kennt die Anforderungen der Praxis und geht sowohl in den grundlegenden Konzepten als auch in den Einzelheiten detailliert darauf ein. Er ist der Verfasser mehrerer Bücher über C++.
Anfrage/Kontakt
Sie möchten den Grundkurs „Modernes C++ für Embedded Systeme“ als Inhouse-Schulung für Ihr Unternehmen planen?
Dann kontaktieren Sie mich einfach telefonisch oder per Mail.
Wir können dann die Inhalte der Schulung auf Ihre spezifischen Bedürfnisse und die Vorkenntnisse Ihrer Mitarbeiter abstimmen und einen Termin vereinbaren, der für Ihre Mitarbeiter passt.