Experience Embedded

Professionelle Schulungen, Beratung und Projektunterstützung

Embedded C++ für Fortgeschrittene: Objektorientierte Programmierung für Mikrocontroller mit C++/EC++ - Live-Online-Training

Die steigende Komplexität in Embedded-Softwareapplikationen und die immer leistungsfähigere Hardware erlauben inzwischen, C++ in steigendem Maße auch in Embedded-Systemen einzusetzen. Dabei sind abhängig von der Applikation Qualitätsmerkmale wie Sicherheit (Safety und Security), Performance, Ressourcenverbrauch und andere zu berücksichtigen.

  • Inhalt
     
  • Ziele -
    Ihr Nutzen
  • Teilnehmer
     
  • Voraussetzungen
     

Sie kennen die Anwendung und die Effizienz fortgeschrittener C++ Konstrukte (Namespaces, Templates, Exception Handling, Runtime Type Identification, New Style Casts, Mehrfachvererbung, Speichermanagement).

Sie sind in der Lage, über die Verwendung dieser Konstrukte in Ihrer Applikation fundiert zu entscheiden.

Sie haben einen Überblick über die Elemente und Mechanismen der STL (Standard Template Library) und können diese bereits einsetzen.

Sie können Patterns (State-Pattern, Singleton-Pattern, Observer-Pattern, Smart-Pointer-Pattern und Layer-Pattern) auf Ihre Applikationen hin adaptieren und dort implementieren.

Der EC++ Kurs für Fortgeschrittene richtet sich an Programmierer, Software-Entwickler, Software-Designer und Software-Architekten, die fortgeschrittene C++ Konstrukte in der Embedded-Softwareentwicklung einsetzen.

Objektorientierte C++ Grundlagen sind zwingend erforderlich, UML-Grundlagen von Vorteil.

C++ für Embedded-Applikationen

  • Historie
  • Empfehlungen und Regelwerke
  • C++ Compiler-Prinzipien
  • Praxistipp mit wichtigen Referenzen

Zusammenfassung grundlegender C++ Konstrukte mit Effizienzbetrachtungen

  • Klasse und Objekt
  • Bestandteile von Klassen
  • Modifizierer für Daten, Funktionen und Objekte
  • Klassenrelationen (Assoziation, Aggregation, Komposition und Vererbung)
  • Virtuelle Funktionen und Interfaces

Namespaces mit Effizienzbetrachtungen

  • Verwendung von Namespaces im Programmcode
  • Namespace Alias, anonymer Namespace, Koenig-Lookup
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Basierend auf der Architektur arbeiten Sie Namespaces in den bestehenden Programmcode ein

Einfachvererbung und Mehrfachvererbung mit Effizienzbetrachtungen

  • Programmierung der Einfach- und Mehrfachvererbung (mit Interfaces)
  • Problemsituationen und Lösungen bei der Mehrfachvererbung
  • Virtuelle Vererbung
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Sie verwenden und programmieren die Mehrfachvererbung, wahlweise virtuell

Exception Handling mit Effizienzbetrachtungen

  • Erläuterung und Programmierung Exception Handling
  • Exception-Klassen und -Hierarchien
  • Benutzer-Exceptions
  • C++ Standard-Exceptions
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Sie binden Exception Handling in die bestehende Applikation ein

Speichermanagement mit Effizienzbetrachtungen

  • Speichersegmente (BSS, Stack, Heap) für Objekte im Vergleich
  • Dynamisches Speichermanagement mit new und delete
  • Operatorüberladung mit new und delete
  • Risiken und Stolpersteine vermeiden
  • Placement new
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Sie erzeugen und löschen Objekte dynamisch auf dem Heap

Runtime Type Identification (RTTI)

  • Erläuterung und Programmierung von RTTI
  • type_info Klasse
  • Konsequenzen beim Einsatz
  • Bezug zu Exception Handling
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Übung: Sie verwenden RTTI zur Klassenidentifikation zur Laufzeit

Typkonvertierung mit New Style Casts mit Effizienzbetrachtungen

  • Static, dynamic, const und reinterpret Cast
  • Die richtige Wahl beim Einsatz
  • Bezug zu RTTI und Exception Handling
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software

Templates

  • Template-Funktionen
  • Template-Klasse und -Objekt
  • Template-Parameter
  • Vererbung und Interfaces mit Template-Klassen
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Praxistipps: Statische versus dynamische Polymorphie
  • Anwendungsbeispiele in der Embedded-Software

C++ Bibliotheken, sinnvoller Einsatz und Effizienzbetrachtungen

  • C++ String Klasse
  • Input/Output Stream Library (I/O Stream)
  • Stringstreams
  • Standard Template Library (STL)
  • Container, Iteratoren, Adapter, Algorithmen
  • Funktionsobjekte
  • Smart Pointer (intelligente Zeiger)
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Sie verwenden die String-Klasse in der Applikation und implementieren Container-basierend das Observer-Pattern

Zustandsautomaten Implementierung und Effizienzbetrachtungen

  • Prinzipielle Möglichkeiten der objektorientierten Implementierung und Modellierung
  • Implementierung auf Basis von switch-case / if-else Konstrukt
  • Implementierung auf Basis von Tabellenabarbeitung
  • Implementierung auf Basis des State-Patterns und Singleton-Patterns
  • Vergleich und Bewertung der verschiedenen Implementierungsarten
  • Vererbung von Zustandsfolgeautomaten
  • Praxistipp: Framework zur Zustandsautomaten-Implementierung

Besonderheiten bei der Programmierung von (quasi) paralleler Software

  • Race Conditions
  • Ressourcen-Management, Semaphore, Mutex
  • Problemsituationen und Lösungen
  • Granularität von Ressourcen
  • Thread-safe Programmierung
  • Praxistipp: Risiken erkennen und Stolpersteine vermeiden

Betriebssystem-Abstraktion (OSAL Operating System Abstraction Layer) mit C++

  • Nutzendarstellung, Vorteile, Nachteile
  • Einsatz von C++
  • Praxisbeispiel mit FreeRTOS™

Hardware-Abstraktionen, Hardware-Treiber und Interrupts mit C++

  • Software-Qualitätsmerkmale
  • Layer-Pattern und Anwendungsbeispiele in Embedded-Software
  • Layer-Kommunikation und Callback-Mechanismen
  • Objektorientierte Konzepte und Programmierung von Standard-Peripherietreibern
  • Objektorientierte Konzepte und Programmierung von Interrupt-Behandlungen
  • Kommunikation und Protokolle
  • Übung: Sie binden einen Treiber und Interrupt-Service in die Applikation ein

Praktische Übungen im Workshop

  • Für die durchgängige Übung (Uhrenapplikation) verwenden Sie das Arm Keil MDK (Microcontroller Development Kit) zusammen mit einer realen Hardware basierend auf einem Arm Cortex™-M3 Mikrocontroller.

MicroConsult PLUS:

  • Ihre Übungen und die von MicroConsult entwickelten Lösungen aus dem Workshop stellen wir für Sie zum Download bereit.
  • Sie erhalten alle C++ Beispiele in elektronischer Form und können diese sehr einfach für Ihre Entwicklungsumgebung anpassen.
  • Sie erhalten zudem eine Tool- und Software-Komponentenübersicht für die Entwicklung von Embedded-Software.
  • Sie bekommen hilfreiche Notationsübersichten für UML und SysML.

Im Preis enthalten:
Trainingsdokumentation, Ihr Zertifikat sowie ggf. erforderliche Ziel-HW o.ä.


ALL INCLUSIVE!

Spätestens 3 Wochen vor Trainingsbeginn erhalten Sie eine verbindliche Durchführungsbestätigung.

Einige Tage vor dem Live-Online-Training erhalten Sie von uns E-Mails mit …

  • ausführlichen Infos rund um Ihr Training
  • Ihre Schulungsunterlagen (Download-Link)
  • einer Einladung zu einer optionalen Probesession mit dem Trainer
  • einer Einladung für jeden Schulungstag, mit Link und Zugangsdaten

Ggf. erforderliche Übungs-HW senden wir Ihnen rechtzeitig vorab zu.


ABLAUF

Live-Online-Training

Anmeldecode: OL-EC++F
* Preis je Teilnehmer, in Euro zzgl. USt.


> Download Blanko-Anmeldeformular
> Trainingsbeschreibung als PDF

Embedded C++ für Fortgeschrittene: Objektorientierte Programmierung für Mikrocontroller mit C++/EC++ - Live-Online-Training

Inhalt

C++ für Embedded-Applikationen

  • Historie
  • Empfehlungen und Regelwerke
  • C++ Compiler-Prinzipien
  • Praxistipp mit wichtigen Referenzen

Zusammenfassung grundlegender C++ Konstrukte mit Effizienzbetrachtungen

  • Klasse und Objekt
  • Bestandteile von Klassen
  • Modifizierer für Daten, Funktionen und Objekte
  • Klassenrelationen (Assoziation, Aggregation, Komposition und Vererbung)
  • Virtuelle Funktionen und Interfaces

Namespaces mit Effizienzbetrachtungen

  • Verwendung von Namespaces im Programmcode
  • Namespace Alias, anonymer Namespace, Koenig-Lookup
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Basierend auf der Architektur arbeiten Sie Namespaces in den bestehenden Programmcode ein

Einfachvererbung und Mehrfachvererbung mit Effizienzbetrachtungen

  • Programmierung der Einfach- und Mehrfachvererbung (mit Interfaces)
  • Problemsituationen und Lösungen bei der Mehrfachvererbung
  • Virtuelle Vererbung
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Sie verwenden und programmieren die Mehrfachvererbung, wahlweise virtuell

Exception Handling mit Effizienzbetrachtungen

  • Erläuterung und Programmierung Exception Handling
  • Exception-Klassen und -Hierarchien
  • Benutzer-Exceptions
  • C++ Standard-Exceptions
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Sie binden Exception Handling in die bestehende Applikation ein

Speichermanagement mit Effizienzbetrachtungen

  • Speichersegmente (BSS, Stack, Heap) für Objekte im Vergleich
  • Dynamisches Speichermanagement mit new und delete
  • Operatorüberladung mit new und delete
  • Risiken und Stolpersteine vermeiden
  • Placement new
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Sie erzeugen und löschen Objekte dynamisch auf dem Heap

Runtime Type Identification (RTTI)

  • Erläuterung und Programmierung von RTTI
  • type_info Klasse
  • Konsequenzen beim Einsatz
  • Bezug zu Exception Handling
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Übung: Sie verwenden RTTI zur Klassenidentifikation zur Laufzeit

Typkonvertierung mit New Style Casts mit Effizienzbetrachtungen

  • Static, dynamic, const und reinterpret Cast
  • Die richtige Wahl beim Einsatz
  • Bezug zu RTTI und Exception Handling
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software

Templates

  • Template-Funktionen
  • Template-Klasse und -Objekt
  • Template-Parameter
  • Vererbung und Interfaces mit Template-Klassen
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Praxistipps: Statische versus dynamische Polymorphie
  • Anwendungsbeispiele in der Embedded-Software

C++ Bibliotheken, sinnvoller Einsatz und Effizienzbetrachtungen

  • C++ String Klasse
  • Input/Output Stream Library (I/O Stream)
  • Stringstreams
  • Standard Template Library (STL)
  • Container, Iteratoren, Adapter, Algorithmen
  • Funktionsobjekte
  • Smart Pointer (intelligente Zeiger)
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele in der Embedded-Software
  • Übung: Sie verwenden die String-Klasse in der Applikation und implementieren Container-basierend das Observer-Pattern

Zustandsautomaten Implementierung und Effizienzbetrachtungen

  • Prinzipielle Möglichkeiten der objektorientierten Implementierung und Modellierung
  • Implementierung auf Basis von switch-case / if-else Konstrukt
  • Implementierung auf Basis von Tabellenabarbeitung
  • Implementierung auf Basis des State-Patterns und Singleton-Patterns
  • Vergleich und Bewertung der verschiedenen Implementierungsarten
  • Vererbung von Zustandsfolgeautomaten
  • Praxistipp: Framework zur Zustandsautomaten-Implementierung

Besonderheiten bei der Programmierung von (quasi) paralleler Software

  • Race Conditions
  • Ressourcen-Management, Semaphore, Mutex
  • Problemsituationen und Lösungen
  • Granularität von Ressourcen
  • Thread-safe Programmierung
  • Praxistipp: Risiken erkennen und Stolpersteine vermeiden

Betriebssystem-Abstraktion (OSAL Operating System Abstraction Layer) mit C++

  • Nutzendarstellung, Vorteile, Nachteile
  • Einsatz von C++
  • Praxisbeispiel mit FreeRTOS™

Hardware-Abstraktionen, Hardware-Treiber und Interrupts mit C++

  • Software-Qualitätsmerkmale
  • Layer-Pattern und Anwendungsbeispiele in Embedded-Software
  • Layer-Kommunikation und Callback-Mechanismen
  • Objektorientierte Konzepte und Programmierung von Standard-Peripherietreibern
  • Objektorientierte Konzepte und Programmierung von Interrupt-Behandlungen
  • Kommunikation und Protokolle
  • Übung: Sie binden einen Treiber und Interrupt-Service in die Applikation ein

Praktische Übungen im Workshop

  • Für die durchgängige Übung (Uhrenapplikation) verwenden Sie das Arm Keil MDK (Microcontroller Development Kit) zusammen mit einer realen Hardware basierend auf einem Arm Cortex™-M3 Mikrocontroller.

MicroConsult PLUS:

  • Ihre Übungen und die von MicroConsult entwickelten Lösungen aus dem Workshop stellen wir für Sie zum Download bereit.
  • Sie erhalten alle C++ Beispiele in elektronischer Form und können diese sehr einfach für Ihre Entwicklungsumgebung anpassen.
  • Sie erhalten zudem eine Tool- und Software-Komponentenübersicht für die Entwicklung von Embedded-Software.
  • Sie bekommen hilfreiche Notationsübersichten für UML und SysML.