Experience Embedded

Professionelle Schulungen, Beratung und Projektunterstützung

Embedded C++ für Fortgeschrittene: Objektorientierte Programmierung für Mikrocontroller mit C++/EC++ - Präsenz-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
  • Spezielle Qualitätsanforderungen an Embedded-Software
  • Empfehlungen und Regelwerke (Codier-Richtlinien)
  • C++ Compiler-Prinzipien
  • Ausblicke: C++ Idiome und Clean Code Development
  • Praxistipp mit wichtigen Referenzen

Zusammenfassung grundlegender C++ Konstrukte mit Effizienzbetrachtungen

  • Klasse und Objekt
  • Bestandteile von Klassen
  • Modifizierer für Daten, Funktionen und Objekte
  • Klassen-Funktionszeiger am Beispiel Zustandsfolgeautomaten-Implementierung
  • Klassenrelationen (Assoziation, Aggregation, Komposition und Vererbung)
  • Virtuelle Funktionen und Interfaces (Realisierung und Zugriff)
  • Erweiterte C++ Konstrukte

Namespaces mit Effizienzbetrachtungen

  • Verwendung von (verschachtelten) Namespaces im Programmcode
  • Namespace Alias, anonymer Namespace, Koenig-Lookup, inline Namespace
  • Abbildung der Software-Architektur im Programmcode
  • C++ Standard-Namespace std
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in 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 und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie verwenden und programmieren die Mehrfachvererbung, wahlweise virtuell

Exception Handling mit Effizienzbetrachtungen

  • Exception Handling - Erläuterung und Programmierung
  • Exception-Klassen und -Hierarchien
  • Benutzer-Exceptions
  • C++ System-Exceptions
  • Verschachteltes Exception Handling
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in 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 mit und ohne Exception Handling
  • Operatorüberladung von new und delete
  • Pool-Allocation Pattern
  • Placement new
  • Risiken und Stolpersteine vermeiden
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie erzeugen und löschen Objekte dynamisch auf dem Heap

Runtime Type Identification (RTTI) mit Effizienzbetrachtungen

  • Erläuterung und Programmierung von RTTI
  • type_info Klasse
  • Konsequenzen beim Einsatz
  • Bezug zu Exception Handling und New Style Casts
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Ü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 und Empfehlungen zur Verwendung in Embedded-Software

Templates mit Effizienzbetrachtungen

  • Template-Funktionen
  • Template-Klasse und -Objekt
  • Template-Parameter und -Alias
  • Vererbung und Interfaces mit Template-Klassen
  • Praxistipps: Statische versus dynamische Polymorphie
  • CRTP (Curiously Recurring Template Pattern)
  • Template-Spezialisierung und (implizite versus explizite) -Instanziierung
  • Type Traits und Concepts
  • Variadische Template-Funktionen und -Klassen
  • Perfekt Forward
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie programmieren eine Template-Klasse zur Anwendung im Observer-Pattern-Kontext der Applikation

Smart Pointer, sinnvoller Einsatz mit Effizienzbetrachtungen

  • Besonderheiten und Varianten von Smart Pointer
  • Programmierung eigener Smart Pointer
  • C++ Smart Pointer
  • Lambda-Funktionen
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software

C++ Standard-Bibliothek: Container, Iteratoren und Algorithmen, sinnvoller Einsatz und Effizienzbetrachtungen

  • Grundlegende Konzeptübersicht
  • Container, Iteratoren, Adapter, Algorithmen
  • Differenzierung und Vorstellung unterschiedlicher Container
  • Container für sequenzielle, sortierende und spezielle Anwendungsfälle
  • Funktionsobjekte (Funktoren)
  • Lambda-Funktionen
  • Allocator-Klasse
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie verwenden eine Container-Klasse im Observer-Pattern-Kontext der Applikation

Callback

  • Embedded-Software-Architekturrichtlinien
  • Embedded-Software-Qualitätsmerkmale
  • Software-Layer-Pattern: Embedded-Software-Schichtenarchitektur
  • Synchrone und asynchrone Software-Architektur
  • Unidirektionale und bidirektionale Kommunikation
  • Callback-Struktur mit und ohne Betriebsmittel eines Betriebssystems

Hardware-Treiber und Interrupts mit C++

  • Objektorientierte Konzepte und Programmierung von Standard-Peripherietreibern
  • Objektorientierte Konzepte und Programmierung von Interrupt-Behandlungen
  • Registerbank-Zugriff
  • Callback-Strukturen im Interrupt-Kontext
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie binden einen Hardwaretreiber und Interrupt-Service in die Applikation ein

Ausgewählte C++ Bibliothekselemente

  • std::string und std::string_view
  • iosteam und iomanip
  • std::stringstream
  • std::function, std::optional, std::variant und std::any
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software

Praktische Übungen im Workshop

  • Für die durchgängige Übung (Uhrenapplikation) verwenden Sie das Arm Keil MDK (Microcontroller Development Kit) zusammen mit einer realen oder simulierten 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 eine Zusammenfassung von skalierbaren Empfehlungen zur Anwendung von C++ in Embedded-Software als Checkliste.
  • 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:
Mittagessen, Getränke, Trainingsunterlagen und Ihr Teilnahmezertifikat


ALL INCLUSIVE!

Verwandte Trainings

Embedded C++: Objektorientierte Programmierung für Mikrocontroller mit C++/EC++ und UML - Präsenz-Training
Anmeldecode: EC++

Embedded C Schulung: Programmiermethoden und -tools für Embedded-Anwendungen - Präsenz-Training
Anmeldecode: EMB-C

DSP-Grundlagen: Applikationen mit dem Mikrocontroller - Präsenz-Training
Anmeldecode: DSP-G

RTOS-Grundlagen und Anwendung: Mechanismen und deren Einsatz in Laufzeit-Architekturen für Embedded- und Echtzeitsysteme - Präsenz-Training
Anmeldecode: RTOS-AR

Embedded-Multicore-Mikrocontroller in der Praxis - Präsenz-Training
Anmeldecode: µCMULTI

UML-Schulung: UML-Grundlagen und Einstieg in die modellbasierte Softwareentwicklung - Präsenz-Training
Anmeldecode: UML-G

Software-Architektur-Schulung für Embedded-Systeme und Echtzeitsysteme - Präsenz-Training
Anmeldecode: EMB-AR

Coaching: Embedded- und Echtzeit-Programmierung
Anmeldecode: C-EMB-PRG


Verwandte Trainings

Präsenz-Training

TerminPreis *Dauer
21.02. – 24.02.20222.475,00 €4 Tage 
25.04. – 28.04.20222.475,00 €4 Tage 
04.07. – 07.07.20222.475,00 €4 Tage 
10.10. – 13.10.20222.475,00 €4 Tage 
12.12. – 15.12.20222.475,00 €4 Tage 
20.02. – 23.02.20232.475,00 €4 Tage 
Anmeldecode: EC++FOR
* Preis je Teilnehmer, in Euro zzgl. USt.
> Download Blanko-Anmeldeformular> Trainingsbeschreibung als PDF

Onsite-Training

In maßgeschneiderten Workshops kombinieren wir Ihre konkreten Projektaufgaben mit unserem Trainingsangebot. Dabei berücksichtigen wir Ihre Anforderungen bezüglich Inhalt, Zeit, Ort, Dauer, technischem Umfeld und Vermittlungsmethodik.

Für Ihre Anfrage oder weiterführende Informationen stehen wir Ihnen gern zur Verfügung.

> Trainingsbeschreibung als PDF

Live-Online - Deutsch

Termin Dauer
13.12. – 16.12.2021 4 Tage  
21.02. – 24.02.2022 4 Tage  
25.04. – 28.04.2022 4 Tage  
04.07. – 07.07.2022 4 Tage  
10.10. – 13.10.2022 4 Tage  
12.12. – 15.12.2022 4 Tage  
20.02. – 23.02.2023 4 Tage  

Präsenz-Training - Englisch

Dauer
4,5 Tage  

Live-Online - Englisch

Dauer
4 Tage  

Coaching

Unsere Coaching-Angebote bieten den großen Vorteil, dass unsere Experten ihr Wissen und ihre Erfahrungen direkt in Ihren Lösungsprozess einbringen und damit unmittelbar zu Ihrem Projekterfolg beitragen.

Coaching: Embedded- und Echtzeit-Programmierung

Embedded C++ für Fortgeschrittene: Objektorientierte Programmierung für Mikrocontroller mit C++/EC++ - Präsenz-Training

Inhalt

C++ für Embedded-Applikationen

  • Historie
  • Spezielle Qualitätsanforderungen an Embedded-Software
  • Empfehlungen und Regelwerke (Codier-Richtlinien)
  • C++ Compiler-Prinzipien
  • Ausblicke: C++ Idiome und Clean Code Development
  • Praxistipp mit wichtigen Referenzen

Zusammenfassung grundlegender C++ Konstrukte mit Effizienzbetrachtungen

  • Klasse und Objekt
  • Bestandteile von Klassen
  • Modifizierer für Daten, Funktionen und Objekte
  • Klassen-Funktionszeiger am Beispiel Zustandsfolgeautomaten-Implementierung
  • Klassenrelationen (Assoziation, Aggregation, Komposition und Vererbung)
  • Virtuelle Funktionen und Interfaces (Realisierung und Zugriff)
  • Erweiterte C++ Konstrukte

Namespaces mit Effizienzbetrachtungen

  • Verwendung von (verschachtelten) Namespaces im Programmcode
  • Namespace Alias, anonymer Namespace, Koenig-Lookup, inline Namespace
  • Abbildung der Software-Architektur im Programmcode
  • C++ Standard-Namespace std
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in 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 und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie verwenden und programmieren die Mehrfachvererbung, wahlweise virtuell

Exception Handling mit Effizienzbetrachtungen

  • Exception Handling - Erläuterung und Programmierung
  • Exception-Klassen und -Hierarchien
  • Benutzer-Exceptions
  • C++ System-Exceptions
  • Verschachteltes Exception Handling
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in 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 mit und ohne Exception Handling
  • Operatorüberladung von new und delete
  • Pool-Allocation Pattern
  • Placement new
  • Risiken und Stolpersteine vermeiden
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie erzeugen und löschen Objekte dynamisch auf dem Heap

Runtime Type Identification (RTTI) mit Effizienzbetrachtungen

  • Erläuterung und Programmierung von RTTI
  • type_info Klasse
  • Konsequenzen beim Einsatz
  • Bezug zu Exception Handling und New Style Casts
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Ü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 und Empfehlungen zur Verwendung in Embedded-Software

Templates mit Effizienzbetrachtungen

  • Template-Funktionen
  • Template-Klasse und -Objekt
  • Template-Parameter und -Alias
  • Vererbung und Interfaces mit Template-Klassen
  • Praxistipps: Statische versus dynamische Polymorphie
  • CRTP (Curiously Recurring Template Pattern)
  • Template-Spezialisierung und (implizite versus explizite) -Instanziierung
  • Type Traits und Concepts
  • Variadische Template-Funktionen und -Klassen
  • Perfekt Forward
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie programmieren eine Template-Klasse zur Anwendung im Observer-Pattern-Kontext der Applikation

Smart Pointer, sinnvoller Einsatz mit Effizienzbetrachtungen

  • Besonderheiten und Varianten von Smart Pointer
  • Programmierung eigener Smart Pointer
  • C++ Smart Pointer
  • Lambda-Funktionen
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software

C++ Standard-Bibliothek: Container, Iteratoren und Algorithmen, sinnvoller Einsatz und Effizienzbetrachtungen

  • Grundlegende Konzeptübersicht
  • Container, Iteratoren, Adapter, Algorithmen
  • Differenzierung und Vorstellung unterschiedlicher Container
  • Container für sequenzielle, sortierende und spezielle Anwendungsfälle
  • Funktionsobjekte (Funktoren)
  • Lambda-Funktionen
  • Allocator-Klasse
  • Assembler-, Speicher- und Laufzeit-Analysen und -Optimierungen
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie verwenden eine Container-Klasse im Observer-Pattern-Kontext der Applikation

Callback

  • Embedded-Software-Architekturrichtlinien
  • Embedded-Software-Qualitätsmerkmale
  • Software-Layer-Pattern: Embedded-Software-Schichtenarchitektur
  • Synchrone und asynchrone Software-Architektur
  • Unidirektionale und bidirektionale Kommunikation
  • Callback-Struktur mit und ohne Betriebsmittel eines Betriebssystems

Hardware-Treiber und Interrupts mit C++

  • Objektorientierte Konzepte und Programmierung von Standard-Peripherietreibern
  • Objektorientierte Konzepte und Programmierung von Interrupt-Behandlungen
  • Registerbank-Zugriff
  • Callback-Strukturen im Interrupt-Kontext
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software
  • Übung: Sie binden einen Hardwaretreiber und Interrupt-Service in die Applikation ein

Ausgewählte C++ Bibliothekselemente

  • std::string und std::string_view
  • iosteam und iomanip
  • std::stringstream
  • std::function, std::optional, std::variant und std::any
  • Anwendungsbeispiele und Empfehlungen zur Verwendung in Embedded-Software

Praktische Übungen im Workshop

  • Für die durchgängige Übung (Uhrenapplikation) verwenden Sie das Arm Keil MDK (Microcontroller Development Kit) zusammen mit einer realen oder simulierten 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 eine Zusammenfassung von skalierbaren Empfehlungen zur Anwendung von C++ in Embedded-Software als Checkliste.
  • 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.