Die richtige Auswahl von Echtzeitbetriebssystem und Mikrocontroller-Plattform für das IoT

Von Jacob Beningo

Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey

Die Entwicklung eines IoT-Geräts (Internet der Dinge) kann viel anspruchsvoller sein, als es vielen Entwicklern oder Unternehmen klar ist. Durch die bloße Einbindung eines Embedded-Systems in die Cloud steigt die Timing-Komplexität des Systems drastisch an. Ein Anstieg der Timing-Komplexität bedeutet, dass Entwickler eine bessere Methode brauchen, wie ihre Software entscheidet, welcher Code zu welchem Zeitpunkt ausgeführt werden sollte. Der beste Weg, um das Schreiben von benutzerdefinierten Ablaufsteuerungen oder die Behandlung des Timings auf Hardwareebene zu vermeiden, ist die Verwendung eines Echtzeitbetriebssystems (RTOS), das uns hilft, die Komplexität des Timings zu bewältigen.

Ein Problem bei der Nutzung eines Echtzeitbetriebssystems besteht heute darin, dass viele Entwickler aus einer Hardware-Umgebung ohne Betriebssystem (Operating System, OS) stammen und dass die Auswahl des richtigen Echtzeitbetriebssystems für eine konkrete Anwendung eine echte Herausforderung sein kann. Eine schnelle Recherche des RTOS-Markts ergab, dass derzeit über 100 Echtzeitbetriebssysteme online verfügbar sind, die Entwickler verwenden können, von Open Source bis hin zu zertifizierten kommerziellen Echtzeitbetriebssystemen. Wie wählt man also das richtige Echtzeitbetriebssystem aus und findet den richtigen Einstieg in seine Nutzung?

In diesem Artikel erläutern wir schrittweise, wie Sie feststellen können, welches Echtzeitbetriebssystem sich am besten für Ihre Anwendung eignet. Anschließend stellen wir Entwicklungsplattformen von STMicroelectronics und Renesas vor, die für den Einstieg verwendet werden können.

Welche Faktoren sind bei der Auswahl eines Echtzeitbetriebssystems zu berücksichtigen?

Echtzeitbetriebssysteme bilden die Grundlage, auf der Entwickler ihren Anwendungscode aufbauen können. Die Auswahl des richtigen Echtzeitbetriebssystems ist entscheidend, um sicherzustellen, dass die Anwendung auf einer stabilen und bewährten Grundlage aufbaut. Allerdings kommt es nicht selten vor, dass die Auswahl des Echtzeitbetriebssystems nur auf einem einzigen Parameter beruht: auf den Kosten.

Natürlich sind die Kosten ein wichtiger Faktor, den es zu berücksichtigen gilt, doch es sollte nicht der einzige sein. Für ein Entwicklerteam können leicht Kosten anfallen, die das Zehnfache der Kosten eines kommerziellen Echtzeitbetriebssystems übersteigen, wenn die Entwickler Probleme mit der Portierung und Implementierung haben oder es nur ungenügenden Support für das Echtzeitbetriebssystem gibt, ganz zu schweigen von der Zeit, die so für ein Projekt verloren gehen könnte. Ganz allgemein gibt es acht verschiedene Kategorien, die ein Entwicklerteam bei der Auswahl eines Echtzeitbetriebssystems für seine Anwendung berücksichtigen sollte. Hierzu zählen die folgenden Kategorien:

  • Gesetzliche Haftung und Haftungsrisiken
  • Leistung
  • Merkmale
  • Preis
  • Ökosystem
  • Middleware
  • RTOS-Anbieter
  • Technische Präferenz

Innerhalb jeder Kategorie gibt es mehrere Kriterien, die für jedes Echtzeitbetriebssystem bewertet werden sollten. Zum Beispiel sollten in der Kategorie der gesetzlichen Haftung die folgenden Punkte von den Teams berücksichtigt werden:

  • RTOS-Haftung bei Rechtsverletzungen
  • Schadloshaltung
  • Garantie
  • Die Notwendigkeit, das Echtzeitbetriebssystem aus juristischer Sicht überprüfen zu lassen

In der Performance-Kategorie sollten die Entwickler Folgendes berücksichtigen:

  • Größe des Programmspeichers
  • RAM-Größe
  • Höchstmaß an Determinismus
  • Laufzeiteffizienz

Jede Oberkategorie kann durch das Entwicklerteam und die Geschäftsführung geprüft werden, um festzulegen, nach welchen Kriterien die Echtzeitbetriebssysteme bewertet werden sollten. Sobald die Kriterien festgelegt wurden, können verschiedene Echtzeitbetriebssysteme anhand einer KT-Matrix (Kepner-Tregoe) beurteilt werden. Dabei handelt es sich um ein rationales Modell für die Entscheidungsfindung, das bei der Erfassung, Priorisierung und Bewertung von Informationen hilft und dabei den Schwerpunkt auf die Bewertung und Priorisierung von Risiken setzt. Das Modell schließt persönliche Voreingenommenheiten aus dem Entscheidungsprozess aus und hilft, die bestmögliche Auswahl zu treffen, mit minimalen negativen Folgen. Sehen wir uns einmal an, wie wir mithilfe einer KT-Matrix ein Echtzeitbetriebssystem auswählen können.

Einsatz einer KT Matrix zur RTOS-Auswahl

Die KT-Matrix für die RTOS-Auswahl kann so aufgebaut sein, wie das in Abbildung 1 und Abbildung 2 dargestellt ist. Die Idee ist, dass wir für jede unserer Auswahlkategorien unsere Auswahlkriterien identifizieren und diese in einer einzelnen Spalte auflisten. Wir können für jedes Kriterium eine Gewichtung festlegen, die anhand einer Skala von 1 bis 5 angibt, wie wichtig das Kriterium für uns ist. Dabei steht 5 für „Von entscheidender Bedeutung“ (z. B. Kosten) und 1 für „Nicht so wichtig“ (z. B. die gesetzliche Haftung). Dann können Spalten für jedes Teammitglied erstellt werden, in die eingetragen wird, wie wichtig jedes Kriterium für jedes in Frage kommende Echtzeitbetriebssystem ist. Dann kann jedes Kriterium gewichtet und zusammengefasst werden, und schließlich wird ein unvoreingenommenes numerisches Ergebnis generiert. Das Echtzeitbetriebssystem mit dem höchsten Wert ist das Echtzeitbetriebssystem, das am besten zu den Kriterien passt.

Abbildung 1: Die obere Hälfte der KT-Matrix zur RTOS-Auswahl. Sie umfasst die Bewertung der Haftungsrisiken, der Leistung, Funktionen und Kosten des Echtzeitbetriebssystems. (Bildquelle: Beningo Embedded Group)

Abbildung 2: Die untere Hälfte der KT-Matrix zur RTOS-Auswahl. Sie umfasst die Bewertung des Ökosystems, der Middleware, des Anbieters und des Unternehmens. (Bildquelle: Beningo Embedded Group)

Die in Abbildung 1 und 2 gezeigten Beispiele sind recht umfangreich, was die Anzahl der bewerteten Kriterien betrifft. Dies übersteigt wohl wahrscheinlich bei Weitem das, was die meisten Entwicklungsteams bewerten wollen, aber die Anzahl der Kriterien kann leicht reduziert werden, indem die Gewichtung auf 0 gesetzt oder die Zeile in der Kalkulationstabelle ausgeblendet wird.

Plattformen, auf denen mit der RTOS-Entwicklung begonnen werden kann

Ein Bereich, in dem Entwickler möglicherweise Schwierigkeiten bei der RTOS-Bewertung haben, ist die Frage, ob ein Echtzeitbetriebssystem ihre Leistungs- und Funktionsbedürfnisse erfüllt. In vielen Fällen kann das ein Entwickler gar nicht wissen, außer er steigt tief in die Bewertungskriterien ein und sammelt Erfahrungen beim Einsatz des Echtzeitbetriebssystems. Als eine äußerst einfache und kostengünstige Methode, ein Echtzeitbetriebssystem zu beurteilen und zu testen, hat sich der Einsatz einer vorhandenen Entwicklungsplattform erwiesen, auf der das Echtzeitbetriebssystem genutzt wird. Werfen wir deshalb einen Blick auf einige Plattformen, die das beliebte Open Source FreeRTOS und das ThreadX-Betriebssystem von Express Logic unterstützen.

Die erste Plattform, die wir uns ansehen, ist die STM32Cube-Plattform von STMicroelectronics. Die STM32Cube-Plattform unterstützt FreeRTOS als Teil der STM32CubeMx- und STM32CubeIDE-Entwicklungsumgebungen von STMicroelectronics. Diese Tools ermöglichen dem Entwickler die Aktivierung von FreeRTOS durch einfaches Häkchen-Setzen im FreeRTOS-Feld, und dann kann der Entwickler mit einem FreeRTOS-Konfigurationstool alle Konfigurationswerte innerhalb des Tools festlegen. Dies ermöglicht dem Entwickler einen extrem schnellen FreeRTOS-Einstieg, so dass er unmittelbar mit der Beurteilung der Merkmale und Leistungskennziffern des Betriebssystems beginnen kann.

Innerhalb der STMicroelectronics-Toolchain stehen viele verschiedene Entwicklungskarten zur Auswahl. Eine der von uns erprobten Entwicklungskarten, die im Laufe der Jahre äußerst beliebt wurde, ist die STM32F429 Discovery-Karte (STM32F429I-DISC1) (Abbildung 3).

Die STM32F429 basiert auf einem Arm® Cortex®-M4-Prozessor, der mit bis zu 168 Megahertz (MHz) getaktet wird. Der Mikrocontroller unterstützt 2 Megabyte (MB) an Flash- und 256 Kilobyte (KB) an SRAM-Speicher. Das reicht bei Weitem für den Code, der zur Entwicklung einer ziemlich komplexen Anwendung benötigt wird. Die Entwicklungskarte enthält auch ein LCD, mehrere LEDs und erweiterbare E/A-Kanäle.

Abbildung 3: Das Discovery-Board STM32F429I ist eine preisgünstige Entwicklungskarte, auf der ein Arm-Cortex-M4-Prozessor für ausreichend Rechenleistung sorgt, damit Entwickler ein Echtzeitbetriebssystem beurteilen können. (Bildquelle: STMicroelectronics)

Für Entwickler, die mit RTOS-basierten IoT-Edge-Geräten arbeiten, die möglicherweise sogar maschinelles Lernen praktizieren müssen, wäre das Discovery-Board STM32F7 (STM32F746G-DISCO) die bessere Wahl (Abbildung 4). Die STM32F7 Discovery-Karte basiert auf einem Arm Cortex-M7-Prozessor. Dieser enthält einen Cache, läuft mit Taktraten bis zu 216 MHz und umfasst 1 MB Flash und 340 KB SRAM. Die Entwicklungskarte bietet außerdem ein 4,3-Zoll-Display (480 x 272 Pixel), Ethernet, SD-Slot, USB, Mikrofon und Lautsprecheranschlüsse, um nur einige Ausstattungsmerkmale zu nennen.

Abbildung  4: Das Discovery-Board STM32F746G ist eine preisgünstige Entwicklungskarte. Sie basiert auf einem Arm-Cortex-M7-Prozessor, der es Entwicklern nicht nur ermöglicht, ein Echtzeitbetriebssystem zu beurteilen, sondern auch alle Machine-Learning-Ressourcen bietet, die möglicherweise für ihr IoT-Randknotengerät nötig sind. (Bildquelle: STMicroelectronics)

Eine letzte Entwicklungskarte, die wir vorstellen möchten, ist das STM32L0 Nucleo Board (NUCLEO-L073RZ) (Abbildung 5). Das STM32L0 Nucleo Board basiert auf dem Arm Cortex-M0+, der speziell für den niedrigstmöglichen Energieverbrauch konzipiert wurde, so dass sich das Board perfekt für energiesparende batteriebetriebene IoT-Edge-Geräte eignet. Der STM32L0-Mikrocontroller arbeitet mit Taktfrequenzen bis zu 24 MHz und umfasst 192 KB Flash und 20 KB SRAM. Dies kommt den Minimalanforderungen sehr nahe, die man zur Ausführung eines Echtzeitbetriebssystems benötigt. Die Entwicklungskarte ist sehr einfach aufgebaut, mit nur einem Bedienschalter und einer LED.

Abbildung 5: Die NUCLEO-L073RZ STM32L0-Entwicklungskarte basiert auf einem Arm Cortex-M0+-Prozessor, der für Hochleistung in energiesparenden Geräten ausgelegt ist. (Bildquelle: STMicroelectronics)

Die zweite Plattform, die wir uns ansehen, ist die Renesas Synergy™-Plattform. Sie ist insofern einzigartig in der Embedded-Branche, als dass zu ihrem Lieferumfang umfangreiche Drittanbieter-Software und Entwicklungstools von etablierten Anbietern gehören.

Wenn zum Beispiel jemand eine STMicroelectronics-Entwicklungskarte besitzt und das ThreadX-RTOS von Express Logic mit dem Embedded Workbench-Compiler und der Entwicklungsumgebung von IAR Systems nutzen will, müsste er sich an IAR wenden, um den Compiler zu erhalten, und an Express Logic wegen des Echtzeitbetriebssystems und müsste dann entsprechende Nutzungslizenzen erwerben. Kauft sich der Entwickler hingegen nur einen einzigen Mikrocontroller, der zur Synergy-Plattform von Renesas gehört, dann erhält er automatisch diese Tools und das einsatzfähige Echtzeitbetriebssystem, zusätzlich zu anderer Middleware.

Für Entwickler, die ThreadX auf einem High-end-Prozessor testen wollen, ist die Renesas Synergy SK-S7G2-Entwicklungskarte (YSSKS7G2E30) eine hervorragende Wahl (Abbildung 6). Die SKS7G2 basiert auf einem Arm Cortex-M4-Prozessor, der mit bis zu 240 MHz getaktet wird und 3 MB Flash und 640 KB RAM umfasst. Diese Entwicklungskarte bietet eine umfangreiche Ausstattung: ein LCD, viele LEDs, E/A-Erweiterung, CAN, PMOD-Erweiterung und einfachen Zugriff auf serielle Schnittstellen und zusätzliche E/A-Kanäle.

Abbildung  6: Zum Lieferumfang des Entwicklungsboards Renesas Synergy SK-S7G2 zählen kommerzielle Entwicklungstools, zu denen auch das ThreadX-RTOS von Express Logic zählt. (Bildquelle: Renesas)

Eine alternative Entwicklungskarte, die sich zur ThreadX-Erprobung eignet, ist die Renesas Synergy TB-S5D5 (YSTBS5D5E10) (Abbildung 7). Die TB-S5D5-Karte ist eine kostengünstige Entwicklungskarte, die mit einem Arm Cortex-M4-Prozessor mit einer Taktung von 120 MHz arbeitet und mit 1 MB Flash und 384 KB SRAM ausgestattet ist. Die Entwicklungskarte verfügt über einen minimalen Funktionsumfang, um die Kosten zu minimieren. Sie enthält nur eine Bedientaste, kapazitive Touch-Eingabe und eine LED.

Abbildung 7: Die Renesas Synergy TB-S5D5-Entwicklungskarte bietet Entwicklern 1 MB an Flash für Code und 384 KB SRAM zur ThreadX-Erprobung. (Bildquelle: Renesas)

Weitere interessante Optionen für Entwickler, insbesondere für diejenigen, die sich mit IoT-Anwendungen befassen, sind das Renesas Synergy AE-Cloud1 IoT-Kit, YSAECLOUD1 (Abbildung 8 ), sowie das Renesas Synergy AE-Cloud2 Cellular IoT-Kit, YSAECLOUD2 (Abbildung 9).

Das Synergie Cloud1 IoT-Kit bietet Entwicklern die Möglichkeit zur Vernetzung mit der Cloud per WLAN, während das Cloud2 Cellular-Kit dem Entwickler darüber hinaus auch die Vernetzung über ein Mobilfunknetz ermöglicht. Beide Entwicklungskarten basieren auf dem S5D9-Prozessor und bieten integrierte Sensoren und LEDs, die aus der Cloud überwacht und gesteuert werden können. Die Kits verfügen auch über vorinstallierte Software, wozu ThreadX zählt, was es dem Entwickler ermöglicht, eine vollständige Konnektivitätslösung mit ihrem Echtzeitbetriebssystem zu testen. (Dies kann hilfreich sein, wenn ein Entwickler den Middleware-Teil der oben besprochenen KT-Matrix bewerten muss.)

Abbildung 8: Das Renesas Synergy AE-Cloud1 IoT-Kit ist eine Entwicklungskarte, die speziell für IoT-Geräte konzipiert wurde, die per WLAN in die Cloud eingebunden werden sollen. Sie bietet die Möglichkeit zur LED-Steuerung und Überwachung der Sensorwerte über einen Cloud-Anbieter wie Amazon Web Services (AWS) oder Microsoft Azure. (Bildquelle: Renesas)

Abbildung 9: Das Renesas Synergy AE-Cloud2 Cellular IoT-Kit ist eine Entwicklungskarte, die speziell für IoT-Geräte konzipiert wurde, die per WLAN oder über ein Mobilfunknetz in die Cloud eingebunden werden sollen. Sie bietet die Möglichkeit zur LED-Steuerung und Überwachung der Sensorwerte über einen Cloud-Anbieter wie AWS oder Azure. (Bildquelle: Renesas)

Eine wichtige Anmerkung zu den Plattformen: Achten Sie bei der Beurteilung eines Echtzeitbetriebssystems auf einer der Plattformen darauf, dass Sie nicht Äpfel mit Birnen vergleichen. Wenn Sie zum Beispiel FreeRTOS auf dem Discovery-Board STM32F429 mit einer Taktung von 168 MHz beurteilen, müssen Sie sicherstellen, dass Sie zur Beurteilung eines anderen Echtzeitbetriebssystems entweder die gleiche Entwicklungskarte verwenden oder zumindest eine mit derselben Taktung.

Tipps und Tricks zur Verwendung eines Echtzeitbetriebssystems

Für jedes RTOS gibt es eigene „Tipps und Tricks“, aber es gibt einige Faustregeln, die für alle Echtzeitbetriebssysteme allgemein gelten:

  • Die Zuweisung von Aufgaben und RTOS-Objekten sollte statisch erfolgen. Die dynamische Zuweisung von Aufgaben und Objekten erfordert den Einsatz einer Speicherzuweisung (malloc()), die nicht deterministisch ist und Heap-Fragmentierungsprobleme verursachen kann, die die Leistung beeinträchtigen oder schlimmstenfalls sogar zu Systemabstürzen führen können.
  • Ändern Sie die Standard-Stackgröße je nach den Anforderungen Ihrer Anwendung. Viele Echtzeitbetriebssysteme bieten einen Standard-Stackwert, der für die meisten Aufgaben überdimensioniert ist, was zu einer RAM-Verschwendung führt. Konfigurieren Sie die Standard-Stackgröße manuell, aber achten Sie auch darauf, die Stackgröße für jede Aufgabe gemäß ihrer Funktion und Bedürfnisse festzulegen.
  • Funktionen, die aus einer Aufgabe aufgerufen werden, sollten ablaufinvariant sein. So wird sichergestellt, dass beim Aufrufen der Funktion aus mehreren Aufgaben keine Gefahr besteht, dass die Daten der anderen Aufgabe beschädigt werden, wenn diese durch eine Aufgabe mit höherer Priorität unterbrochen wurde.
  • Verwenden Sie Speicherblock-Pools, wenn sie verfügbar sind. Ein Speicherblock-Pool ist ein Speicher-Pool, der ein deterministisches Verhalten aufweist und zur Laufzeit zur dynamischen Speicherzuweisung verwendet werden kann. Dies ist eine bessere Option als die Verwendung von malloc(), aber die meisten Open-Source-Betriebssysteme verfügen nicht über diese Speichermanagementfunktion.
  • Minimieren Sie die Anzahl der Aufgaben, die in der Anwendung verwendet werden. Es mag eine Versuchung sein, mit einem RTOS viele Tasks zu erstellen, aber das Erstellen von Tasks, die nicht erforderlich sind, kann die verfügbare Speichermenge erheblich einschränken, weil zusätzlicher Speicher für den Task-Steuerungsblock und den zugehörigen separaten Stackspeicherplatz benötigt wird.

Fazit

Da mit dem IoT der Bedarf an immer komplexerer Software in Embedded-Systemen wächst, ist der Einsatz eines Echtzeitbetriebssystems zu einer Notwendigkeit geworden, um es Entwicklern zu ermöglichen, dieser Komplexität Herr zu werden und sie zu abstrahieren. Der Trick besteht aber darin, nicht irgendein Echtzeitbetriebssystem auszuwählen. Da nicht alle Echtzeitbetriebssysteme gleich sind, kann ein erhebliches Maß an Zeit und Mühe verschwendet werden, wenn das Echtzeitbetriebssystem den Zielen des Entwicklers entgegensteht.

Stattdessen benötigen die Entwickler einen proaktiven Ansatz für die RTOS-Auswahl, damit sie alle unterschiedlichen Aspekte sorgfältig bewerten können, wozu nicht nur das Echtzeitbetriebssystem als solches zählt, sondern auch periphere Überlegungen wie die Frage des RTOS-Anbieters und welcher Support verfügbar ist, wenn es zu Problemen kommt. Ein wirksamer Ansatz ist es, mit einer KT-Matrix zu beginnen, die eine sorgfältige Bewertung des jeweiligen Echtzeitbetriebssystems ermöglicht, und dann das ausgewählte Echtzeitbetriebssystem auf Mikrocontroller-Plattformen auszuführen, die das Echtzeitbetriebssystem vollständig unterstützen, damit gewährleistet ist, dass es das richtige Echtzeitbetriebssystem für die jeweilige Anwendung ist.

DigiKey logo

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.

Über den Autor

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo ist ein Berater für eingebettete Software, der derzeit mit Kunden in mehr als einem Dutzend Ländern zusammenarbeitet, um ihr Unternehmen durch die Verbesserung von Produktqualität, Kosten und Markteinführungszeit dramatisch zu transformieren. Er hat mehr als 200 Artikel über Entwicklungstechniken für eingebettete Software veröffentlicht, ist ein gefragter Redner und technischer Trainer und verfügt über drei Abschlüsse, darunter einen Masters of Engineering der University of Michigan. Bei Interesse können Sie ihn unter jacob@beningo.com kontaktieren oder besuchen Sie seine Website www.beningo.com und melden Sie sich für seinen monatlichen Embedded Bytes Newsletter an.

Über den Verlag

Nordamerikanische Fachredakteure von DigiKey