Embedded Programmierung und Betriebssysteme

Echtzeit-Software: Embedded-Programmierung und Betriebssysteme

Wie sieht professionelle Embedded-Softwareentwicklung heute aus?
Ein schneller Einstieg in die Welt der Echtzeit-Betriebssysteme und der Embedded-Software-Programmierung in EC und EC++.

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

Dabei halten Sie die Architektur- und Designvorgaben genauso ein wie die Programmierrichtlinien 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 und Embedded C++

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 bedeutet Determinismus (Vorhersagbarkeit). Dabei differenzieren Sie zwischen harter und weicher Echtzeit. Bei harter Echtzeit garantieren Sie die Einhaltung Ihrer Zeitvorgaben (u.a. Deadlines, Antwortzeiten) in 100% aller Fälle, anders als bei weicher Echtzeit. Dort entwickeln Sie 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 und Embedded C++ direkt auf die Peripherieregister der Hardware zu (Treiberprogrammierung). Dabei beherrschen Sie auch die Besonderheiten der Interrupt-Programmierung.

Echtzeit-Betriebssysteme (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.

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 bestimmen, wann diese bearbeitet werden muss und ob die Bearbeitung auch rechtzeitig erfolgt (automatische Überwachung des Task-Timeouts).

Das geeignete Betriebssystem wählen Sie als Software-Entwickler oder 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-Übersicht aus. Sie unterscheiden zwischen 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 ergibt sich aus den Anforderungen Ihrer Applikation. Nicht jedes Betriebssystem ist automatisch echtzeitfähig. Sie können sich auch dafür entscheiden, ein eigenes Betriebssystem oder Mini-Betriebssystem selbst 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, 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).

Task-Zustände und deren Transitionen im Betriebssystem

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

Multicore in Hardware- und Mikrocontroller-Architekturen

In modernen Hardware- und Mikrocontroller-Architekturen gewinnt das Thema Multicore bzw. 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.

Darüber hinaus optimieren Sie mit modernen Debug- und Trace-Methoden zielgerichtet in kürzester Zeit Ihre Software.

Realzeit-Betriebssysteme und Embedded-Software-Programmierung gehören zu den wichtigen Disziplinen, die Embedded-Entwickler in Zeiten von IoT beherrschen sollten. Nutzen Sie das Know-How aus unseren Trainings-Angeboten, um mehr darüber zu lernen.

Weiterführende Informationen

MicroConsult Training & Coaching zu Embedded- und Echtzeitprogrammierung

MicroConsult Fachwissen Embedded- und Echtzeit-Softwareentwicklung

Veröffentlicht von

Ingo Pohle

Ingo Pohle

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