Drucken

Embedded Programmierung mit modernem C++

Warum modernes C++ die Antwort auf die Herausforderung der embedded Softwareentwicklung ist.

Zum Thema

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...". Bietet C++ zum einen den Durchgriff auf die Hardware, bietet C++ zum anderen Abstraktion an, um komplexe Systeme zu entwickeln. Insbesondere mit C++11 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.

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 die Antworten darauf in C++ . Diese sind:
  • Sicherheitskritische Systeme
  • Hohe Performanz
  • Eingeschränkte Ressourcen
  • Mehrere Aufgaben gleichzeitig

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

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

Seminarmethoden

Zuerst vermittelt Ihnen der Referent die notwendige Theorie, die Sie dann in praktischen Übungen direkt answenden. 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.

Zielgruppe

Jeder, der über Grundkenntnisse in C++ verfügt und diese mit modernem C++ erweitern möchte.

Termine

Frankfurt am Main

23.10.2019 | 10:00 - 18:00 Uhr
24.10.2019 | 09:00 - 17:00 Uhr
25.10.2019 | 09:00 - 17:00 Uhr

Zur Anmeldeseite
Stuttgart

10.12.2019 | 10:00 - 18:00 Uhr
11.12.2019 | 09:00 - 17:00 Uhr
12.12.2019 | 09:00 - 17:00 Uhr

Zur Anmeldeseite

Teilnahmegebühr

1.490,00 € zzgl. MwSt.

Drucken