Softwareentwicklung

Wie Echtzeit-Software auch ohne Echtzeit-Betriebssystem entwickelt werden kann

| Autor / Redakteur: David Kalinsky* / Hendrik Härter

Echtzeit-Software muss nicht immer auf Echtzeit-Betriebssystem-Plattformen erstellt werden
Echtzeit-Software muss nicht immer auf Echtzeit-Betriebssystem-Plattformen erstellt werden ( Gerd Altmann, pixelio.de)

Ist ein Echtzeit-Betriebssystem notwendig, wenn Echtzeit-Software entwickelt wird? David Kalinsky beleuchtet in unserem Beitrag grundlegende Designthemen.

Im folgenden Artikel werden grundlegende Designthemen der Embedded- und Echtzeit-Software beleuchtet. Dazu gehören das Task-Scheduling, die Kommunikation zwischen Tasks oder zwischen Interrupt Service Routinen und Tasks sowie die Unterschiede zwischen Do-it-Yourself-Lösungen und einem RTOS.

Als erstes soll der Task-Scheduler als Kernstück eines Echtzeit-Softwaresystems vorgestellt werden. Die Auswahl ist groß und reicht vom einfachen zyklischen Executive, der sich leicht selbst entwickeln lässt, bis hin zum prioritätsbasierten preemptiven Scheduler in handelsüblichen RTOS-Systemen.

Je nach Applikation und I/O-Anforderungen kann ein Scheduler gewählt werden, der in Eigenregie entwickelt wird. Die oberen sechs Task-Scheduler-Typen lassen sich in Eigenregie entwickeln; Einzelheiten hierzu werden später erklärt. Die restlichen drei stehen in vielen handelsüblichen RTOS-Systemen zur Verfügung, sollten jedoch nur in Projekten eingesetzt werden, bei denen die Einschränkungen, welche die Typen 1-6 mit sich bringen, nicht tolerierbar sind.

In weniger komplexen Embedded-Systemen lässt sich Applikationssoftware einfach als Endlosschleife programmieren. Die in der Schleife programmierten Aktivitäten werden sequentiell ausgeführt. Verzweigungen und geschachtelte Schleifen sind möglich, vorausgesetzt, der Code wird nach der Ausführung in der Schleife wieder zum Anfang zurückgeführt.

In einfachen Embedded-Systemen funktioniert diese Art der Programmierung gut. Vor allem ist sie dann geeignet, wenn die Software die Codesequenz schnell ausführt und rasch zurückführen kann. Dieser Programmierstil beeinträchtigt jedoch oft die Performance. Interrupts von Hardware-Geräten lassen sich damit nicht bearbeiten, und für die Interaktion mit Software-in-the-Loop müssen die Geräte abgefragt werden.

In komplexeren Systemen lässt sich der Endlosschleifen-Ansatz weiter ausbauen. In diesen Systemen gibt es Hunderttausende von Codezeilen, die der Entwickler in separate Einheiten, den Tasks, unterteilt. Die Tasks, oder auch Prozesse genannt, sollten möglichst unabhängig voneinander sein und nur minimal interagieren. In Softwaredesigns mit einfachem zyklischen Executive werden die Tasks innerhalb einer Endlosschleife in Standardsequenzen ausgeführt. Im Großen und Ganzen entspricht dies dem Ansatz mit Endlosschleife, jedoch sind die ausgeführten Tasks hier umfangreicher. Diese Methode ist als Round-Robin-Scheduling bekannt.

Die Tasks können Informationen untereinander weitergeben, indem sie gemeinsam genutzte Daten schreiben und lesen. Eine Task wird grundsätzlich vollständig ausgeführt, ehe die nächste Task beginnt. Damit ist gewährleistet, dass eine Task keinen unvollständigen Daten weitergibt. Auch mit dieser Methode lassen sich Interrupts von Hardware-Geräten nicht bearbeiten, und für die Interaktion mit Software-in-the-Loop müssen die Geräte abgefragt werden. Diese Methode könnte man auch als „Echtzeit“-Task-Scheduling bezeichnen, vorausgesetzt, die gesamte Software wird schnell in der Schleife ausgeführt und die Schleife kann immer wieder sehr schnell laufen.

Inhalt des Artikels:

Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Kommentar abschicken
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 24232920 / Embedded Software Entwicklungswerkzeuge)