Zum Hauptinhalt springen Zur Suche springen Zur Hauptnavigation springen
Versandkostenfreie Lieferung innerhalb Deutschlands

Embedded Programmierung mit modernem C++

Referent: Rainer Grimm

ArtikelnummerSW10962.1
Produktart Inhouse Seminar
Sprache Deutsch
Produktart auswählen
Preis auf Anfrage

exkl. MwSt.: 0,00 €

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

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.