Die außerordentliche Akzeptanz des Internet of Things (IoT) führt zur Konvergenz zweier entgegengesetzter Ziele: dem Aufbau moderner, innovativer IoT-Funktionen und der Verringerung von Kosten und Speicherbedarf.

Die Bedeutung von Low-Cost-MCUs

Durch die Realisierung des Internets der Dinge entstehen Milliarden vernetzter Produkte, die in der Cloud integriert sind. Die Software, die zur Bewältigung dieser Verbindungen und der IoT-Integration erforderlich ist, steht vor einem explosionsartigen Wachstum, und Low-Cost-Mikrocontroller (MCUs) werden die Ausbreitung des IoT weiter vorantreiben. Heutige MCUs verfügen über genug Rechenleistung und sind mit kostengünstiger drahtloser Konnektivität wie Bluetooth und Wi-Fi als Basistechnologie für die Integration in die Cloud verfügbar.

Bei Milliarden von vernetzten Produkten benötigt das IoT intelligente Endknoten. Sie müssen unabhängig voneinander und in Übereinstimmung miteinander agieren. Diese vernetzten Produkte müssen ihre eigenen Entscheidungen treffen beziehungsweise auf Entscheidungen einer höheren Interaktionsebene reagieren können. Kurz gesagt, im IoT vernetzte Produkte erfordern komplexe Machine-to-Machine (M2M)-Middleware für die Kommunikation, für den Netzwerkbetrieb ohne Konfiguration und für moderne Protokolle für die Cloud-Anbindung. Die Ressourcen vieler Endprodukte sind limitiert, um Kosten, Speichergröße, Abmessungen, Leistungsaufnahme, Wärmeabfuhr und ähnliches zu minimieren. Deshalb ist es sehr schwierig, moderne Embedded-Systeme zu entwickeln, die die IoT-Anforderungen erfüllen.

Auswahl des richtigen Betriebssystems

Bei vielen IoT-Endknoten schließt die Komplexität des Embedded-Systems sogenannte Bare-Metal-Softwaredesigns aus. Vielmehr wird zum Managen der erweiterten Middleware und IoT-Protokolle zusätzliche Software in Form eines Betriebssystems benötigt.

Um mehr System-on-Chips (SoC) mit begrenzten Ressourcen verwenden zu können, hat man in der Vergangenheit bei MCU-basierten Entwicklungen den Speicherbedarf reduziert. Viele MCU-basierte Designs enthalten daher keine externen Speicherressourcen und beschränken die Laufzeit-Software auf den internen Speicher, der nur einige Dutzend Kilobyte umfasst. Da die Formfaktoren schrumpfen und die Komplexität steigt, wird es immer schwieriger, das letzte aus Betriebssystem, Middleware und Anwendungen herauszuholen.

Eckdaten

Die riesige Zahl vernetzter Produkte im Internet der Dinge verlangt nach Embedded-Systemen mit echtzeitfähigen, aber ressourcenschonenden Betriebssystemen. Das Nucleus RTOS von Mentor Graphics ist zu diesem Zweck skalierbar und verfügt über ein integriertes Power-Management-Framework.

Die Reduzierung des Speicherbedarfs beginnt für Embedded-Entwickler beim zugrunde liegenden Framework, dem Betriebssystem. Da es eine breite Palette von verfügbaren Betriebssystemen gibt, entscheidet die Auswahl eines skalierbaren Betriebssystems über den Erfolg. Die Skalierbarkeit eines kommerziellen RTOS (Real-Time Operating System) erlaubt es Entwicklern, nur die wirklich benötigten Funktionen zu integrieren und dadurch den Speicherbedarf zu verkleinern. Ein skalierbares kommerzielles RTOS wie das Nucleus RTOS von Mentor Graphics lässt sich leicht auf etwa 10 KByte reduzieren. Bei Designs mit sehr begrenzten Systemressourcen ist sogar eine weitere Reduzierung möglich. Zum Beispiel lässt sich der Nucleus-Kernel mithilfe von CSGNU-Tools im Thumb2-Instruction-Mode auf zirka 6 KByte konfigurieren. Dabei sind die Betriebssystem-Objekte der Task- und Interrupt-Steuerung, Ereignisse und Semaphoren sowie Timer enthalten. Um selbst die strengsten Speicheranforderungen zu erfüllen, lässt sich das RTOS sogar nur mit Betriebssystem-Objekten konfigurieren, die mit einem Speicher von weniger als 3 KByte auskommen.

Obwohl die Konfiguration des Software-Frameworks hinsichtlich minimaler Speichergröße ein bewährter Ansatz ist, um die Systemanforderungen zu erfüllen, gibt es eine Grenze. Der wachsende Bedarf an fortschrittlichen Betriebsmerkmalen bei IoT-Geräten erfordert auch noch mehr Kernel-Funktionen und nicht weniger. Um die Ressourcennutzung zu maximieren, wird ein neuer Ansatz benötigt.

Die wachsende Bedeutung eines skalierbaren RTOS

Aufgrund der Konvergenz von leistungsfähigen MCUs und fortschrittlichen Betriebsmerkmalen des IoT ist die Verringerung des Softwareumfangs jedoch nur ein Teilaspekt des Gesamtkonzepts, um die Anforderungen vernetzter IoT-Produkte mit begrenzten Systemressourcen zu erfüllen. Einem Großteil der heute verfügbaren RTOS fehlt die erforderliche Skalierbarkeit, damit sie die Vorteile der tatsächlichen Eigenschaften des zugrundeliegenden Halbleiters nutzen können.

Der Single-Core-ARM-Cortex-M4 ist eine ideale Low-Cost-MCU für die Entwicklung von IoT-Endknoten.

Der Single-Core-ARM-Cortex-M4 ist eine ideale Low-Cost-MCU für die Entwicklung von IoT-Endknoten. Mentor Graphics

Zum Beispiel basieren viele IoT-SoCs auf ARM-Cortex-M3- und -M4-Cores mit einer Memory Protection Unit (MPU). Diese MPUs bieten Zugriffskontrolle auf Speicherbereiche und können Domänen partitionieren, um Softwareunterabschnitte voneinander zu isolieren. Mit der MPU lassen sich die erforderlichen Privilegien und Zugriffsregeln durchsetzen, um Prozesse in ihre jeweiligen geschützten Speicherbereiche aufzuteilen. Dies verbessert nicht nur die Zuverlässigkeit des Systems, da Fehler eines einzelnen Prozesses nicht das Gesamtsystem verschlechtern, sondern ermöglicht auch zusätzliche Funktionen wie dynamisches Linken und Laden. Die Partitionierung war eine der Hauptfunktionen in Highend-Allzweck-Betriebssystemen wie Linux. Jedoch schränken der Overhead, der mit der Speichervirtualisierung verbunden ist, und das Fehlen von deterministischen Antworten  den Einsatz von Linux in Echtzeit-Systemen ein. Und der große Speicherbedarf von Linux schließt es als mögliches Betriebssystem in MCU-basierten Designs aus.

Maximierung der Ressourcennutzung

Dem Anwender stehen viele kommerzielle RTOS zur Auswahl. Eine Mehrheit dieser Echtzeitbetriebssysteme scheint ihren Schwerpunkt aber nicht auf die Abstrahierung der MPU zu legen. Dies würde Embedded-Designern einen Mechanismus für die Entwicklung von Software zur Verfügung stellen, deren Architektur für die Partitionierung geeignet ist. Mit einem in einem Betriebssystem integrierten Framework lässt sich die MPU leicht während der Laufzeit konfigurieren, um Speicherbereiche sowohl im Kernel als auch im Anwenderbereich einzurichten.

Das Nucleus-Prozessmodell erhöht durch hardwareunterstützte Fehlerisolierung die Zuverlässigkeit der Geräte.

Das Nucleus-Prozessmodell erhöht durch hardwareunterstützte Fehlerisolierung die Zuverlässigkeit der Geräte. Mentor Graphics

Intuitive Anwendungsprogrammierschnittstellen, sogenannte APIs (Application Programming Interfaces) lassen sich zum Laden der Prozesse während der Laufzeit oder basierend auf dem Anwendungsfall während der Ausführung verwenden. Nucleus nutzt zum Beispiel einen leichtgewichtigen Ansatz für ein Prozessmodell. Die MPU in Cortex-M3/M4-basierten SoCs kann man für die Partitionierung der Domänen verwenden, ohne dass der Bedarf oder der Overhead einer Speichervirtualisierung entsteht.

Prozesse lassen sich direkt vom ROM oder Flash in den Speicher laden, und mit vorverlinkter Einbettung lassen sich Prozesse in situ im Flash ausführen. Dies ist eine Funktion, die üblicherweise in MCUs mit sehr begrenztem RAM erforderlich ist. Die Nutzung der MPU in Cortex-M-basierten SoCs bietet Embedded-Entwicklern ein leistungsfähiges Feature, um Tardis-ähnliche Produkte zu entwickeln. Eingeschränkte Speicherressourcen in IoT-Geräten lassen sich auf der Basis von Anwendungsfällen effizient zuweisen und einsetzen.

Von der Tardis-Zeitmaschine aus der britischen Science-Fiction-Fernsehserie „Doctor Who“ ist bekannt, dass das Innere von Tardis viel größer ist als die äußere Erscheinung vermuten lässt.

Von der Tardis-Zeitmaschine aus der britischen Science-Fiction-Fernsehserie „Doctor Who“ ist bekannt, dass das Innere von Tardis viel größer ist als die äußere Erscheinung vermuten lässt. BBC

Zudem lassen sich die Prozesse während der Laufzeit entweder im Kernel oder Anwenderbereich dynamisch verlinken und laden. Kernel-Mode-Prozesse laufen auf einer höher privilegierten Ebene, mit dem gleichen Privileg wie das Root-Kernel-Image für den Zugriff auf die Systemressourcen. Die Prozesse der Anwenderbereiche laufen mit niedrigerer Priorität unter einem voll ausgestatteten RTOS mit Speicherschutz. Dies gewährleistet, dass die Prozesse der Anwenderbereiche das System nicht beeinflussen. Anwendungscode und Middleware lassen sich in einzelne Prozesse laden. Zusätzliche Prozesse exportieren bei Bedarf Symbole oder Funktionen für die Verwendung durch andere Prozesse, wodurch ein laufendes System weitere Funktionsmerkmale erhält. Sobald die Prozesse geladen sind, werden sie so lange wie erforderlich in ihren geschützten Bereichen ausgeführt. APIs lassen sich aufrufen, um die Anwendung zu stoppen und zu entladen, was wiederum Systemressourcen freigibt. Um weitere Systemressourcen freizugeben, kann man ebenso Anwendungen auf der Basis von Anwendungsfällen laden und Speicher freigeben, wenn sich der Anwendungsfall ändert.

Was ist mit Power-Management?

Ein Framework kann für das Power-Management sehr wichtig sein. Die Bedeutung des Power-Managements und der Power-Optimierung steigen ständig, da immer mehr batteriebetriebene Produkte mit der Cloud verbunden sind. Aktuelle MCUs bieten Low-Power-Funktionen wie Leerlauf- und Sleep-Modi, dynamische Spannungsfrequenzskalierung (DVFS) und Ruhezustand. Die Komplexität durch die Implementierung der Low-Power-Funktionen in der Hardware verhindert jedoch, dass der Anwender leistungseffizienten Code entwickeln kann. Wenn das zugrundeliegende Betriebssystem kein Framework besitzt, das die Vorteile der Low-Power-Funktionen im Halbleiter nutzen kann, schafft die Menge des erforderlichen Codes eine neue Komplexitätsebene und bläht den Code weiter auf.

Arbeiten in einem Power-Management-Framework

Ebenso wie moderne Softwarearchitekturen Hardwarefunktionen durch Gerätetreiber abstrahieren, bietet ein Power-Management-Framework allen mithilfe von intuitiven API-Aufrufen gesteuerten Systemgeräten einen strukturierten Mechanismus. Jede Veränderung eines Gerätes, die Auswirkungen auf andere Geräte hat, führt zu einem koordinierten Übergang über alle involvierten Systeme. Das Power-Management-Framework reduziert den Stromverbrauch auf unterschiedliche Arten: die Systemzustände steuern die Leistungsaufnahme der Peripherie, die DVFS konzentriert sich auf das gesamte System, das Leerlauf-Power-Management verhindert, dass Energie ohne erkennbares Ziel aufgewendet wird, und Ruhezustand/Sleep-Modi erlauben es dem System, dass es während längerer Inaktivitätsphasen off-line geht.

Im Mittelpunkt eines Power-Management-Frameworks befindet sich der Gerätemanager, der während des Wechsels in einen Low-Power-Zustand den Übergang aller Geräte koordiniert.

Im Mittelpunkt eines Power-Management-Frameworks befindet sich der Gerätemanager, der während des Wechsels in einen Low-Power-Zustand den Übergang aller Geräte koordiniert. Mentor Graphics

Embedded-Softwareentwickler können mit einem Power-Management-Framework effektiv Code schreiben, um die Power-Anforderungen zu erfüllen, ohne dass sie Code aufblähen oder den Speicherbedarf vergrößern. Zweifellos wird das IoT die Verbreitung von vernetzten Produkten und batteriebetriebenen Wearables fördern, und die meisten dieser Geräte werden auf Low-Cost-MCUs mit begrenzten Systemressourcen basieren. Ein Power-Management-Framework erlaubt es, die Power-Spezifikationen früh im Designzyklus zu berücksichtigen. Den Code kann man während des Entwicklungsprozesses testen, um die Power-Anforderungen zu erfüllen.

Fazit

Das IoT mit seinen vielen vernetzten Produkten und Diensten fordert von Softwareentwicklern, dass sie Embedded-Systeme mit begrenzten Systemressourcen mit weiteren Funktionsmerkmalen ausstatten. Skalierbare Betriebssysteme sind zur Minimierung des Speicherbedarfs notwendig. Dies allein erfüllt aber nicht die Anforderungen von ressourcenbeschränkten IoT-Endknoten. Benötigt wird ein voll ausgestattetes Echtzeit-Betriebssystem, das skalierbar ist und über ein Power-Management-Framework verfügt, mit dem es die Funktionen im Halbleiter nutzen kann. Unter Embedded-Entwicklern taucht oft die Frage auf, wie man moderne Funktionsmerkmale hinzufügen und gleichzeitig den Speicherbedarf verkleinern könne, um die Kosten, Abmessungen und Leistungsaufnahme zu verringern. Mit einem skalierbaren RTOS mit integriertem Framework lässt sich ein System aufbauen, das mehr Ressourcen bietet, als es den Anschein hat.