© Stmool/Shutterstock.com
Azure Sphere – Teil 2

In Doppeltraktion


Der für Azure Sphere verwendete MT3620-Prozessor enthält neben dem Hauptkern auch zwei von Microsoft als Echtzeit-CPUs bezeichnete Module. In diesem Artikel wollen wir uns ihre Verwendung näher ansehen.

Designer von Echtzeitbetriebssystemen, Prozessrechnern und anderen Elementen der Embedded-Welt leben so gut wie immer in einem Spannungsfeld aus Funktionsumfang und Echtzeitreaktivität. Dass Funktionen wie Garbage Collection oder die Einspielung von Updates bequem sind, steht außer Frage. Außer Frage steht allerdings auch, dass die Verarbeitung bzw. Realisierung dieser Funktionen Systemressourcen in Anspruch nimmt, die nicht für die Verarbeitung von Hardwareereignissen zur Verfügung stehen. Der Arduino Yun war der erste Versuch, um diesem Problem im semiprofessionellen Bereich mit einem „kombinatorischen“ Prozessrechner zu Leibe zu rücken. Im MT3620 sieht man – vergleiche das in Abbildung 1 gezeigte Architekturdiagramm – im Allgemeinen eine ähnliche Architektur.

hanna_sphere2_1.tif_fmt1.jpgAbb. 1: Mehrere Herzen schlagen im Azure Sphere

Während die auf der A7-Architektur basierende Haupt-CPU für die Erledigung der diversen Azure-Housekeeping-Tasks verantwortlich ist, sind die beiden M4-Prozessoren, zumindest in einer idealen Welt, ausschließlich für die Interaktion mit Peripheriegeräten verantwortlich. Eventuell notwendige Datenaustäusche erfolgen über Betriebssystemfeatures.

Startvorbereitungen

Microsoft hat die in Visual Studio zur Verfügung stehenden Projektbeispiele seit dem Erscheinen von Azure Sphere stark abgespeckt. Für unsere folgenden Schritte findet sich allerdings noch etwas: Suchen Sie im Startassistenten nach dem String Azure Sphere MT3620 Blank, um ein Beispiel zu laden, das sowohl High-Level- als auch Low-Level-Funktionen zur Verfügung stellt. Im Bereich der Namensvergabe haben Sie dabei die Wahl. Der Autor entschied sich in den folgenden Schritten für die Option „SUSDualCoreSphere“. Wundern Sie sich nicht, wenn nach dem Start etwas Zeit vergeht, weil Visual Studio im Hintergrund diverse CMake-Dateien abarbeiten muss. Nach getaner Arbeit sehen wir jedenfalls die in Abbildung 2 gezeigte Projektstruktur, die sich auf Wunsch über die Option Erstellen | Alle Erstellen kompilieren lässt.

hanna_sphere2_2.tif_fmt1.jpgAbb. 2: Zwei Projektskelette im Unterordner

Während der Arbeiten an diesem Artikel lieferte Microsoft testweise eine neue Version des Sphere-SDK aus, die die Vorlage Azure Sphere MT3620 Blank nicht mehr enthielt. In diesem Fall erzeugen Sie im ersten Schritt eine Applikation auf Basis der Vorlage HLCore Blank und klicken danach auf Datei | Neu | Projekt. Als Nächstes wählen Sie ein Projekt vom Typ Azure Sphere RTCore Blank, im Schritt Neues Projekt konfigurieren müssen Sie in der Box Projektmappe die Option Hinzufügen auswählen. Die beiden Projekte verhalten sich dann analog – der einzige Unterschied zur hier besprochenen Basisversion des SDK ist, dass Sie die ComponentId-Beziehungen von Hand einfügen müssen.

Auffällig ist, dass sowohl der für den HL-Kern vorgesehene Ordner als auch sein weniger komplexes Pendant je eine Manifestdatei mitbringen. In der Welt von Azure Sphere sind sowohl High-Level- als auch Realtime-Applikationen vollwertige Applikationspakete, die sich dem Betriebssystem gegenüber über eine Manifestdatei identifizieren. Im Fall der High-Level-Applikation sieht diese wie in Listing 1 aus.

Listing 1

{ "ComponentId": "69116fd3-da10-47d6-8de9-70a9b54c5109", . . . "Capabilities": { . . . "AllowedApplicationConnections": [ "d55af12d-efab-4f08-b67b-93b9c8431786" ] }, "ApplicationType": "Default" }

Als Nächstes werfen wir einen Blick auf die Echtzeitkomponente, deren relevante Teile wie in Listing 2 dargestellt aussehen.

Listing 2

{ "ComponentId": "d55af12d-efab-4f08-b67b-93b9c8431786", . . . "Capabilities": { "AllowedApplicationConnections": [ "69116fd3-da10-47d6-8de9-70a9b54c5109" ] }, "ApplicationType": "RealTimeCapable" }

Neben der unterschiedlichen ComponentId fällt auf, dass der ApplicationType-Wert einer Echtzeitapplikation die Konstante RealTimeCapable ist. Beachten Sie zudem die verwendeten AllowedApplicationConnections Capabilities, die die ComponentId der gegenüberliegenden Applikation identifizieren. Das ist wichtig, weil Sphere die Kommunikation zwischen Applikationen nur dann erlaubt, wenn die beiden Manifestdateien die jeweilige Gegenstelle als legitimen Kontakt deklarieren.

Analyse der Wellenformperformance

Was in der Welt der klassischen Programmierung das „Hello World“-Programmbeispiel ist, ist für Embedded-Entwickler das Erzeugen einer charakteristischen Wellenform an einem oder mehreren GPIO-Pins. Diese auf den ersten Blick wenig kompliziert erscheinende Aufgabe ermöglicht es dem Entwickler allerdings, mehr über die Interaktion mit der zugrunde liegenden Hardware zu erfahren. Durch Anschließen von Geräten wie Oszilloskop und Modulationsdomänenanalysator kann man dann Rückschlüsse auf das Echtzeitverhalten ziehen. Als erste Aufgabe wollen wir uns dabei für die Ausgabe einer charakteristischen Wellenform im High-Level-Teil unseres Sphere-Programms entsche...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang