Experience Embedded

Professionelle Schulungen, Beratung und Projektunterstützung

Echtzeit: Embedded-Programmierung und Betriebssysteme

Auf Basis der im Software-Design verfeinerten Software-Architektur implementieren (programmieren) Sie als Softwareentwickler (Software Developer) diese strukturiert, prozedural, objektbasiert oder objektorientiert mit der Programmiersprache C oder C++.

Dabei halten Sie die Architektur- und Designvorgaben genauso ein wie die Programmierrichtlinien (Codierrichtlinien, Coding Style Guide) und bestätigen dies durch Reviews oder statische Codeanalyse-Tools. MISRA C und MISRA C++ sind Regelwerke für die Programmierung von sicherheitskritischer Software aus dem Bereich Automotive. Diese Codierregeln gelten auch in anderen Bereichen, wie beispielsweise der Medizintechnik, als Referenz.

Codierung von Embedded- und Echtzeit-SW mit Embedded C (EC) und C++ (EC++)

Embedded C (EC) und Embedded C++ (EC++) sind keine eigenständigen Standards, sondern beschreiben lediglich den Einsatz der Programmiersprachen C und C++ für die Codierung von Embedded- und Echtzeit-Software.

Echtzeit (Realzeit, real-time, realtime RT) bedeutet Determinismus (Vorhersagbarkeit). Dabei differenzieren Sie zwischen harter Echtzeit (hard real-time) und weicher Echtzeit (soft real-time). Bei harter Echtzeit garantieren Sie die Einhaltung Ihrer Zeitvorgaben (u.a. Deadlines, Antwortzeiten) in 100% aller Fälle, anders als bei weicher Echtzeit. Was ist bei weicher Echtzeit? Sie entwickeln Echtzeitstrategien, um die Echtzeitanforderungen einzuhalten.

In der Embedded-Programmierung und Echtzeit-Programmierung wissen Sie als Software-Entwickler genau, was Sie wie programmieren: Wo liegt eine Variable und wie ist das Echtzeitverhalten der Software? Sie kennen dabei die Konsequenzen für Ihr Target mit Ihrer Toolkette (Compiler, Linker, Locator) auf Maschinencode-Ebene (Assembler-Code). Als Embedded- und Echtzeit-Softwareentwickler setzen Sie aus den Programmiersprachen C und C++ die Programmierkonstrukte ein, welche typische Qualitätsmerkmale unterstützen, wie z.B. geringen Ressourcenbedarf, hohe Performance, garantierte Reaktionszeiten, funktionale Sicherheit und Zuverlässigkeit, und vermeiden den Einsatz der Konstrukte, die dazu gegenläufig sind.

Hardwarenahe Programmierung

Bei der hardwarenahen Programmierung greifen Sie mit Embedded C (EC) und Embedded C++ (EC++) direkt auf die Peripherieregister der Hardware zu (Treiberprogrammierung). Dabei beherrschen Sie auch die Besonderheiten der Interrupt-Programmierung.

Realzeit-Betriebssysteme – Real-time Operating System RTOS

Die Laufzeitarchitektur programmieren Sie bei einfacher und sequenzieller Software in einer Endlos-Schleife (while(1) bzw. einer "Super Loop" oder "Main Loop"). Ist die Software komplexer und Sie stoßen an die Grenzen der Handhabbarkeit der Steuerung des Softwareablaufes durch eine Endlos-Schleife, dann empfiehlt sich der Einsatz eines Embedded-Betriebssystems (Real-time Operating System RTOS).

Hierfür unterteilen Sie die Software in einzelne Funktionen (sogenannte Tasks), identifizieren (quasi-) parallele Ausführungspfade, definieren Wiederholzeitpunkte, Timeout-Zeiten und Datenabhängigkeiten für Ihre Software-Funktionen (Tasks). Der Vorzug eines Betriebssystems ist, dass für alle Steuerungs-, Kommunikations- und Überwachungsfunktionen Betriebssystem-Services zur Verfügung stehen. Sie können z.B. bei der Definition jeder Task (eigenständige Software-Aufgabe) bestimmen, wann diese Task bearbeitet werden muss und ob die Bearbeitung auch rechtzeitig erfolgt (automatische Überwachung des Task-Timeouts). Das geeignete Betriebssystem (Operating System OS) wählen Sie als Software-Entwickler oder als Software-Architekt auf Basis der System-Anforderungen, Betriebssystem-Auswahlkriterien (z.B. Singlecore-RTOS oder Multicore-RTOS, mit oder ohne Memory Protection Service, etc.) und einer Betriebssystem-Liste (Betriebssystem-Übersicht) aus. Sie unterscheiden die Betriebssystem-Arten Embedded-Betriebssystem und Echtzeit-Betriebssystem.

Beispiele für Betriebssysteme

Embedded-Linux, RT Linux, Linux Kernel, FreeRTOS und CMSIS-RTOS als ARM-Betriebssystem.

Was ist das beste Betriebssystem?

Das beste Betriebssystem gibt es generell nicht, höchstens für Ihre Applikation. Nicht jedes Betriebssystem ist automatisch echtzeitfähig. Sie können sich auch dafür entscheiden, ein eigenes Betriebssystem oder Mini-Betriebssystem zu konzipieren und zu programmieren.

Einsatz des Betriebssystems

Beim Einsatz des Betriebssystems stellen Sie sich als Software-Entwickler erfolgreich den Herausforderungen, wenn Sie die Grundlagen, Bestandteile, Definitionen, Aufgaben, Funktionsweisen und den Applikationseinsatz der folgenden Betriebssystem-Mechanismen kennen:

Prozess-Management, Task-Management, Thread-Management, Scheduling-Verfahren (kooperatives Scheduling, präemptiv/ preemptive, zeitbasiert, zeitgetriggert, Prioritäten-basierend, Time-Slice, Round-Robin, Earliest-Deadline-First EDF), Synchronisation (Event, Signal), Ressourcen-Management (binäre Semaphore, zählende Semaphore, Mutex, critical Section), Interrupt-Management, Zeitmanagement, interne Kommunikation (Message Queue, Mailbox, Shared Memory, Pipe, Socket, Message-based), Speichermanagement und I/O-Management (Input/Output-Management).

Echtzeit - Embedded-Programmierung - Betriebssystem: Task-Zustände und deren Transitionen

Bild: Task-Zustände und deren Transitionen im Betriebssystem

Multicore in Hardware- und Mikrocontroller-Architekturen

In modernen Hardware-Architekturen und Mikrocontroller-Architekturen (microcontroller architectures) gewinnt das Thema Multicore und Multiprozessor (homogen und heterogen) immer mehr an Bedeutung. Für die meisten Embedded- und Echtzeit-Software-Entwickler stellt dies eine komplett neue Herausforderung dar. Sie als Software-Entwickler wissen, was Sie bei der Programmierung in C und in C++ zusammen mit einem oder mehreren Betriebssystemen auf einer Multicore-Plattform bzw. Multiprozessor-Plattform unbedingt beachten müssen.

Mit modernen Debug- und Trace-Methoden optimieren Sie zielgerichtet in kürzester Zeit Ihre Software.

Einen schnellen Einstieg in die Welt der Realzeit-Betriebssysteme RTOS und der Embedded-Software-Programmierung in EC und EC++ finden Sie bei MicroConsult.



Echtzeit: Embedded-Programmierung und Betriebssysteme - unsere Trainings & Coachings

Wollen Sie sich auf den aktuellen Stand der Technik bringen?

Dann informieren Sie sich zu Schulungen/ Seminaren/ Trainings/ Workshops und individuellen Coachings von MircoConsult zu den Themen Embedded-Programmierung und Embedded-Betriebssysteme.

 

Unsere Inhalte vermitteln wir Ihnen sowohl in Präsenz- als auch Live-Online-Trainings.

Embedded C: Programmiermethoden und -tools für Embedded-Anwendungen

Im Mittelpunkt dieses Trainings steht die hardwarenahe C-Programmierung von 8-, 16- oder 32-Bit Mikrocontroller-Architekturen. Fallstricke und Stolpersteine der Programmiersprache C lernen Sie kennen und vermeiden. Sie lernen die Programmierung einer Hardware-Abstraktionsschicht gemäß eines Software-Architekturmodells kennen und erhalten einen Überblick über den gesamten Lifecycle eines Produktes.
Zum Training - Embedded C: Programmiermethoden und -tools für Embedded-Anwendungen

Embedded C++: Objektorientierte Programmierung für Mikrocontroller mit C++/EC++ und UML

In kompakter Form erhalten Sie einen Überblick über den gesamten Entwicklungsprozess - Softwareanalyse, Design, Implementierung und Test. Der Schwerpunkt liegt dabei auf dem Design von Softwaresystemen mit Hilfe der UML und der Implementierung in der Programmiersprache C++. Ein weiterer wichtiger Punkt sind die Erfüllung besonderer Anforderungen an die Software-Qualität von Embedded-Systemen, zum Beispiel in Hinblick auf Laufzeit und Codeeffizienz, sowie das Vermeiden bzw. frühzeitige Erkennen von Programmierfehlern mit Hilfe von Programmierrichtlinien, wie sie z.B. Beispiel der MISRA-C++ Standard bietet.
Zum Training - Embedded C++: Objektorientierte Programmierung für Mikrocontroller

Embedded C++ für Fortgeschrittene: Objektorientierte Programmierung für Mikrocontroller mit C++/EC++

Sie können fortgeschrittene C++ Konstrukte in Embedded- und Echtzeit-Applikationen einsetzen und dazu die Effizienz (Ressourcenverbrauch und Performance) einschätzen.
Zum Training - Embedded C++ für Fortgeschrittene: Objektorientierte Programmierung

Embedded-Multicore-Mikrocontroller in der Praxis

In diesem praxisorientierten Training lernen Sie die wesentlichen Mechanismen von Multicore-Mikrocontrollern und deren Leistungsfähigkeit kennen. Neue Herausforderungen im Umgang mit Multicore meistern Sie effizient dank der Erfahrung, die Sie anhand zahlreicher Übungsbeispiele erwerben.
Zum Training - Embedded-Multicore-Mikrocontroller in der Praxis

Multithread-Programmierung und Multicore-Programmierung

Dieses Training zeigt, wie die Eigenschaften von Multithreading-Systemen eingesetzt werden können bzw. welche Probleme gelöst werden müssen, um die Prozessorleistung - insbesondere bei modernen Multicore-Systemen - bestmöglich nutzen zu können.
Zum Training - Multithread-Programmierung und Multicore-Programmierung

Objektorientierte Softwareentwicklung: Spezielle Programmierprinzipien mit C++ - der Weg zum Clean Code

Softwareentwicklung als Handwerkskunst - 'Software Craftsmenship' - Der Weg zum 'Clean Code'
Zum Training - Objektorientierte Softwareentwicklung: Spezielle Programmierprinzipien mit C++ - der Weg zum Clean Code

Design Patterns (nicht nur) für Embedded-Systeme

Sie erfahren, unter welchen Bedingungen klassische Entwurfsmuster auch in ressourcenlimitierten embedded Systemen gewinnbringend eingesetzt werden können. Muster, die für diesen Zweck besonders geeignet sind, werden anhand von hardwarenahen oder anderen für embedded Systeme typischen Anwendungen erläutert. Besonderer Wert wird dabei auf die Beurteilung der Speicherplatz- und Laufzeitkosten gelegt.
Zum Training - Design Patterns (nicht nur) für Embedded-Systeme

Embedded-Software-Design und Patterns mit C

Sie lernen die für die Embedded-Softwareentwicklung wichtigen Programmierprinzipien und Design Pattern kennen, können diese in C programmieren und in Ihren Projekten anwenden. Sie beherrschen die objektorientierte Programmierung und Implementierung von Zustandsautomaten in C. Sie sind mit den Mechanismen eines Embedded- / Echtzeitbetriebssystems vertraut und setzen Hardware-Treiber, Interrupt-Konzepte und Callback-Strukturen in C um - unter Berücksichtung von "Design for Test". Mittels Refactoring verbessern Sie die Qualität von vorhandenem C-Programmcode (Legacy Code).
Zum Training - Embedded-Software-Design und Patterns mit C

Software-Architekturen für Embedded-Systeme und Echtzeitsysteme

Sie kennen die Begriffe und Bedeutung von Software-Architektur; die Aufgaben und Verantwortungen von Software-Architekten und deren Rolle im Projekt; State-of-the-Art Methoden und Techniken zur Entwicklung von Software-Architekturen. Sie haben die Fähigkeit, Softwarearchitekturen mit Projektbeteiligten abzustimmen, zu dokumentieren und kommunizieren sowie die wesentlichen Schritte des Software-Architekturentwurfs selbstständig durchzuführen.
Zum Training: Software-Architekturen für Embedded-Systeme und Echtzeitsysteme

Modernes C++: Neuerungen durch C++11 und C++14 bei Sprachsyntax, Bibliothek und Templates

Sie lernen alle wesentlichen neuen Features von C++11 und C++14 kennen, damit Sie diese zum Schreiben von effizienterem und leichter wartbarem Code einsetzen können. Enthalten ist eine Einführung in die grundlegenden Prinzipien der Compilezeit-Metaprogrammierung mit Templates, welche durch die "Variadischen Templates" (eingeführt mit C++11) an Mächtigkeit gewonnen hat, deren Implementierung sich wiederum über "Fold Expressions" (geplant für C++1z) deutlich vereinfacht.
Zum Training - Modernes C++: Neuerungen durch C++11 und C++14

RTOS-Grundlagen und Anwendung: Mechanismen und deren Einsatz in Laufzeit-Architekturen für Embedded- und Echtzeitssysteme

Sie kennen die Mechanismen moderner Echtzeitbetriebssysteme und können damit neue Software-Laufzeitarchitekturen entwickeln und bestehende warten - unabhängig von dem konkreten Echtzeitbetriebssystem-Produkt. Sie können Software-Laufzeitarchitekturen dokumentieren und kommunizieren.
Zum Training - RTOS-Grundlagen und Anwendung

RTOS-Anwendung: Entwicklung von Laufzeit-Architekturen für Embedded- und Echtzeitsysteme

Sie sind in der Lage, mit modernen Echtzeitbetriebssystemen (Real-Time Operating Systems, RTOS) neue Software-Laufzeitarchitekturen zu entwickeln und bestehende zu warten - unabhängig von dem konkreten Echtzeitbetriebssystem-Produkt.
Zum Training - RTOS-Anwendung

WDF-KMDF und WDM Kernel Mode Treiberentwicklung unter Windows

Sie erlernen die grundlegende objektorientierte Struktur des WDF Kernel Mode Driver Framework (KMDF). Sie erhalten Hintergrundwissen über die zugrunde liegende WDM-Treiberarchitektur und die Kernel Mode Komponenten moderner Microsoft Windows Betriebssysteme.
Zum Training - WDF-KMDF und WDM Kernel Mode Treiberentwicklung

Linux Systemprogrammierung

Sie kennen die Programmierschnittstelle (API) des Betriebssystems Linux/Unix gemäß dem POSIX-Standard und der Single UNIX Specification. Sie beherrschen die Anwendung der Systemaufrufe, kennen die Implementation des Dateisystems und verstehen das Prozessmodell.
Zum Training - Linux Systemprogrammierung

Embedded-Echtzeit-Linux: Vom Bootloader bis zum Realtime-System (Linux-RTOS)

Sie haben die Aufgabe, ein Embedded Linux-Target aufzubauen? Wie fange ich damit an? Was benötige ich dazu? Wie komme ich zu einem echtzeitfähigen System? Der Aufbau und die Funktionsweise eines Embedded Linux Systems mit harten Echtzeiteigenschaften stehen im Mittelpunkt dieses Trainings.
Zum Training - Embedded-Echtzeit-Linux: Vom Bootloader bis zum Realtime-System (Linux-RTOS)

Embedded-Linux-Architektur: Kernel-Treiberentwicklung

Wie entwickle ich einen Kernel-Treiber? Auf was muss ich bei Embedded und Echtzeit-Systemen achten? Essentiell für die Entwicklung eines performanten Treibers ist ein grundlegendes Verständnis der Kernel-Architektur. Genau hier setzt das Training an. 
Zum Training - Embedded-Linux-Architektur: Kernel-Treiberentwicklung

Linux Multithread-/Multicore-Programmierung

Dieses Training zeigt, wie die Prozessorleistung von Linux-Systemen - insbesondere bei modernen Multicore-Architekturen - bestmöglich genutzt werden kann. Er richtet sich an Softwareentwickler, die neue Applikationen entwickeln oder existierende Anwendungen optimieren müssen, und eignet sich insbesondere auch für die Anwendung unter Embedded-Linux.
Zum Training - Linux Multithread-/Multicore-Programmierung

Embedded-Linux-Softwareentwicklung

In diesem Training wird die Entwicklung von Software für Embedded-Linux behandelt. Dabei werden alle Aspekte der systemnahen Entwicklung behandelt und auch gleich mit den entsprechenden Entwicklungswerkzeugen geübt.
Zum Training - Embedded-Linux-Softwareentwicklung

Embedded-Linux für Test und Support

Ist ein Embedded-Linux-Projekt fertig entwickelt, dann geht es los mit dem Testen, Support und Service. Dieses Training vermittelt denenigen, die ein Linux-System nicht entwickelt haben, dieses aber betreuen sollen, einen systematischen Einstieg in das fertige System.
Zum Training - Embedded-Linux für Test und Support

Softwarerecht: Haftungsrisiken beim Einsatz von Embedded-Software und Open-Source-Software

Sie kennen die typischen rechtlichen Haftungsrisiken im Zusammenhang mit Embedded Software sowie die rechtlichen Strukturen, die im Zusammenhang mit dem Einsatz von Open Source Software im eigenen Unternehmen oder gegenüber Kunden wichtig sind.
Zum Training - Softwarerecht: Haftungsrisiken beim Einsatz von Embedded-Software und Open-Source-Software

 

Alle Trainings zum Thema Embedded-Programmierung und Betriebssysteme

 

Coachings - Echtzeit: Embedded-Programmierung und Betriebssysteme

Die Coaching-Angebote vom MicroConsult bieten den großen Vorteil, dass unsere Experten ihr Wissen und ihre Erfahrungen direkt in Ihren Lösungsprozess einbringen und damit unmittelbar zum Projekterfolg beitragen. Gemeinsam werden beispielsweise Einsatzmöglichkeiten und Nutzen neuer Software-Engineering- oder Führungsmethoden analysiert, konkrete Maßnahmen zur Einführung entwickelt und dann umgesetzt.

Coachings - Echtzeit: Embedded- und Echtzeit-Betriebssysteme

Coachings - Echtzeit: Embedded-Programmierung


Training & Coaching zu den Themen unseren Portfolios finden Sie hier.

 

Unsere Inhalte vermitteln wir Ihnen sowohl in Präsenz- als auch Live-Online-Trainings.


Echtzeit: Embedded-Programmierung und Betriebssysteme - Fachwissen

Wertvolles Fachwissen zum Thema Echtzeit - Embedded-Programmierung und Embedded-Betriebssysteme steht für Sie zum kostenfreien Download bereit, darunter die folgenden Veröffentlichungen und Vorträge:

  • Software-Architektur braucht Verantwortung und Können
  • So sieht zukunftsfähige Embedded-Softwareentwicklung aus
  • Von C nach Embedded-C: Das Ziel bestimmt den Weg
  • Betriebssystem: mit oder ohne? - Vergleich und Auswahl von Software-Laufzeitarchitekturen
  • MyOS: Kochbuch für ein Mini-Betriebssystem - C-Implementierung eines eigenen Kernels auf dem Cortex-Mx
  • Objektbasiert oder objektorientiert? - Moderne Low-level-Treiberprogrammierung mit C/C++
  • Implementierung von Zustandsautomaten in C++
  • Prinzipien für Embedded-Softwarearchitekturen
  • Die SOLID-Prinzipien: 5 Grundsätze für bessere Software
  • Programmierung einer Betriebssystem-Abstraktionsschicht - Konzepte und Umsetzung mit C++
  • Quo Vadis, Multicore? Irrwege & Zukunftstrend
  • Ein Multicore-Referendum - Die Qual der Wahl
  • SW Design Challenges for Real-Time Multicore Microcontroller Systems
  • Aktuelle Trends bei Multicore-Mikrocontroller-Architekturen
  • Still Single? - Step by Step to Multicore!
  • Initialisierung und Erstellung von Low-level-Treibern
  • Software-Paradigmen: Was programmiere ich da eigentlich?
  • Software-Engineering mit UML & C: Praxisgerechter Einsatz für kleine Embedded-Systeme
  • Gesunde Software

 

Fachwissen: Echtzeit - Embedded-Programmierung und Embedded-Betriebssysteme

 
Fachwissen zu den weiteren Themen unseren Portfolios finden Sie hier.

 


Echtzeit: Embedded-Programmierung und Betriebssysteme - unsere Experten

Thomas Batt


Dipl.-Ing. (FH) Thomas Batt ist gebürtiger Freiburger. Nach seiner Ausbildung als Radio- und Fernsehtechniker studierte er Nachrichtentechnik in Offenburg. Seit 1994 arbeitet er kontinuierlich in verschiedenen Branchen im Bereich Embedded-/Realtime-Systementwicklung. 1999 wechselte Thomas Batt zur MicroConsult GmbH. Dort verantwortet er heute als zertifizierter Trainer und Coach die Themenbereiche Systems/ Software Engineering für Embedded-/Realtime-Systeme sowie Entwicklungsprozess-Beratung.

Ingo Pohle

Dipl.-Ing. Ingo Pohle ist Mitgründer und Geschäftsführer der MicroConsult GmbH. Er ist ein international anerkannter Spezialist für Embedded-Lösungen mit reichem Erfahrungsschatz rund um den Einsatz von Embedded-Mikrocontrollern, Bussystemen und RTOS.