Embedded Programmierung mit modernem C++
Artikelnummer | SW10962.1 |
---|---|
Produktart | Inhouse Seminar |
Sprache | Deutsch |
Produktinformationen "Embedded Programmierung mit modernem C++"
Warum modernes C++ die Antwort auf die Herausforderung der embedded Softwareentwicklung ist
Embedded Programmierung ist eine der Domänen für modernes C++. Daher verwundert das Zitat von Bjarne Stroustrup zu modernem C++ nicht: „… make C++ even better for embedded system programming…„. C++ bietet zum einen den Durchgriff auf die Hardware, zum anderen Abstraktion, um komplexe Systeme zu entwickeln. Insbesondere mit modernem C++ erhält C++ noch mehr mächtige Features für die embedded Programmierung. Das sind Features wie die Move-Semantik, die es erlaubt, große Objekte billig zu verschieben statt teuer zu kopieren, Features wie constexpr-Funktionen, die es ermöglichen, teure Berechnungen auf die Compilezeit zu verlagern oder Features wie der neue Container std::array, der das Beste aus std::vector und dem C-Array vereint.
Zunächst vermittelt Ihnen der Referent die notwendige Theorie, die Sie dann in praktischen Übungen direkt anwenden. Die besonderen C++ Features für die embedded Softwareentwicklung werden vom Referenten in den Kontext der Softwareentwicklung mit modernem C++ eingebunden. Zu allen Übungen erhalten Sie natürlich die Musterlösungen. Bitte beachten Sie, dass Sie für das Seminar einen Laptop benötigen, auf dem ein aktueller C++ Compiler (mind. C++11) installiert ist.
Agenda
1. Seminartag: Sicherheitskritische Systeme
- Vereinheitlichte Initialisierung mit {} überall anwenden und dadurch die heimliche Verengung von Datentypen vermeiden
- Automatische Typableitung kennen lernen um Refaktoring von Code zu unterstützen und Variablen immer zu initialisieren
- Aufzählungen mit Gültigkeitsbereich als typsichere Variante zu klassischen Aufzählungen kennen lernen
- Mit nullptr Zeiger die Mehrdeutigkeiten der Zahl 0 und dem Makro NULL verhindern
- Benutzerdefinierte Literale einsetzen um Zahlen mit Einheiten zu verwenden
- Zusicherungen an den Code mit static_assert vom Compiler prüfen lassen
2. Seminartag: Hohe Performanz
- Selbst optimierenden Code mit Type-Traits implementieren
- Konstante Ausdrücke mit constexpr verwenden um teuere Berechnung auf die Compilezeit zu verschieben
- Durch den Umstieg von geordnete auf ungeordnete assoziative Container die Applikation deutlich beschleunigen
- Templates
- Vermittlung der Grundlagen
- Vorteile von Templates vorstellen
- Vergleich von statischem Polymorphismus (Templates) mit dynamischen Polymorphismus (Objekt-Orientierung)
- Eingeschränkte Ressourcen
- Move-Semantik einsetzen um
- Teures Kopieren durch billiges Verschieben zu ersetzen
- Daten nur dann zu erzeugen, wenn es unbedingt notwendig ist
- Daten zu verschieben, die nicht kopiert werden können
- Perfekt Forwarding um Funktions-Argumente identisch weiterzureichen
- Speicherverwaltung
- Den Einsatz von new und delete besser verstehen
- placement new für besondere Einsatzzwecke verwenden
- Speicherlöcher durch placement new finden
- Den neuen Container std::array kennen lernen, der die Speicher- und Laufzeitcharakteristik des C-Arrays mit dem Interface des C++-Vektors verbindet
- Smart Pointer
- Exklusive Besitzverhältnisse mit std::unique_ptr
- Geteilte Besitzverhältnisse mit std::shared_ptr
- Zeitweise Besitzverhältnisse mit std::weak_ptr
- Performanz- und Ressourcenvergleich der Smart Pointer
- Move-Semantik einsetzen um
3. Seminartag: Mehrere Aufgaben gleichzeitig
- Das Speichermodell
- Sequenzielle Konsistenz verstehen
- Atomare Datentypen kennen lernen
- Threads
- Erzeugen eines Threads
- Lebenszeit eines Threads
- Datenübergabe an einen Thread
- Gemeinsame von Threads verwendete Daten
- Schutz mit Mutexen
- Schutz mit Locks
- Daten thread-sicher initialisieren
- Konstanten Ausdrücken
- Die Funktion std::call_once und dem Flag std::once_flag
- Statischen Variablen
- Thread lokale Variablen
- Bedingungsvariablen
- Synchronisation von Threads
- Gefahren von Bedingungsvariablen
- Task
- std::async
- std::packaged_task
- std::promise und std::future
Ziele
In dem Seminar erlernen Sie die Vorteile von modernem C++ in der embedded Programmierung. Dabei lernen Sie zuerst die Anforderungen an die embedded Programmierung und anschließend die Antworten darauf in C++ . Diese sind:
- Sicherheitskritische Systeme
- Hohe Performanz
- Eingeschränkte Ressourcen
- Mehrere Aufgaben gleichzeitig
Zielgruppe
Jeder, der über Grundkenntnisse in C++ verfügt und diese mit modernem C++ erweitern möchte.
Rainer Grimm
Rainer Grimm ist seit vielen Jahren als Softwarearchitekt, Team- und Schulungsleiter tätig. In seiner Freizeit schreibt er gerne Artikel zu den Programmiersprachen C++, Python und Haskell, spricht aber auch auf Fachkonferenzen. Auf seinem Blog Modernes C++ beschäftigt er sich intensiv mit seiner Leidenschaft C++. Seit einem Jahr steht er auf selbstständigen Beinen. Insbesondere das Vermitteln von Wissen zu modernem C++ ist ihm eine Herzensangelegenheit. Seine Bücher „C++11 für Programmierer“, „C++“ und C++-Standardbibliothek“ für die kurz und gut Reihe sind beim Verlag O’Reilly erschienen. Sein englischsprachiges Werk „The C++ Standard Library“ hat er bei Leanpub veröffentlicht.