Tools

Embedded Software Engineering Reloaded: mbeddr

Seite: 2/4

Anbieter zum Thema

mbeddr - das flexibel erweiterbare C

Die Suche nach einem Ausweg aus diesem offensichtlichen Widerspruch war die zentrale Motivation bei der Entwicklung von mbeddr [5]. mbeddr ist Open Source und verkörpert in erster Linie eine erweiterbare Version der Programmiersprache C. Daneben bringt mbeddr vordefinierte Spracherweiterungen mit sich, die dem Anwender sehr nützliche und bzgl. des Abstraktionsgrades höher stehende Konzepte und Notationen an die Hand zu geben.

Dies sind etwa physikalische Einheiten, Schnittstellen und Komponenten, Zustandsautomaten oder Tests. Darüber hinaus kann der Anwender jederzeit eigene Spracherweiterungen definieren und diese zusammen mit den existierenden Erweiterungen nutzen. Sowohl die vordefinierten als auch die benutzerdefinierten Erweiterungen sind modular: sie können ohne die Programmiersprache C selbst ändern zu müssen entwickelt werden und sind nur für diejenigen Anwendungen sichtbar, die die jeweilige Erweiterung explizit nutzen.

Wesentlich ist auch, dass sämtliche klassischen C-Sprachkonstrukte weiterhin verfügbar sind. So ist es parallel zur Nutzung der vielseitigen vordefinierten und ggf. vorhandenen benutzerdefinierten Spracherweiterungen jederzeit möglich, maschinennahen und hocheffizienten Code zu schreiben, wann immer dies notwendig wird.

Am Ende wird die Gesamtheit des mit mbeddr geschriebenen Codes im Rahmen eines Generierungsprozesses wieder auf klassischen C99-Code zurückgeführt. Dieser kann anschließend mit handelsüblichen Compilern für den jeweiligen Mikrocontrollertyp weiterverarbeitet werden.

Technische Grundlage für mbeddr und die modulare Erweiterbarkeit der Programmiersprache C ist die MPS-Plattform von JetBrains [6]. MPS ist Open Source und liefert die notwendige Infrastruktur, um neue Sprachen oder Erweiterungen für vorhandene Sprachen zu definieren, dazu passende textuelle oder grafische Notationen festzulegen sowie Codegeneratoren zu implementieren, die die neuen Sprachen bzw. Spracherweiterungen auf eine Basissprache zurückzuführen.

Zusätzlich bietet MPS dem Anwender den gewohnten Komfort einer modernen Entwicklungsumgebung, der für Basissprachen und Spracherweiterungen gleichermaßen zur Verfügung steht. Dazu gehören Syntaxhervorhebung, Code-Vervollständigung, prompte Fehlermarkierungen, Code-Refactorings, Quickfixes und Tooltipps (siehe Bild 1 in der Bildergalerie).

Komponentenorientierte Architektur

Durch die Verwendung von mbeddr konnte die Umsetzung der Software für das eingangs beschriebene Smart Meter auf sehr fortschrittliche Art und Weise erfolgen. Grundlage bildete dabei eine hochmodulare komponentenorientierte Architektur, die in Bild 2 der Bildergalerie dargestellt ist. Jeder der inneren Blöcke stellt eine atomare Komponente dar und jeder der umgebenden Blöcke ein Subsystem, das Komponenten mit ähnlich gelagerten Verantwortlichkeiten zu Schichten zusammenfasst.

Auf der untersten Ebene befindet sich die Hardwareabstraktionsschicht (HAL). Die darin enthaltenen Komponenten kapseln die Peripherieeinheiten oder sonstige Ressourcen des Mikrocontrollers und machen deren Funktionalitäten über einfach zu nutzende Schnittstellen zugänglich. Die Komponenten dieser Schicht sind die einzigen, die direkt mit den Registern, Interrupts, usw. des Mikrocontrollers interagieren und somit hardwarespezifisch sind. Die Komponenten in allen darüber befindlichen Schichten bedienen sich dagegen ausschließlich der Schnittstellen der Hardwareabstraktionsschicht und bleiben somit hardwareunabhängig.

Dies sind zum einen die Komponenten der Kommunikationsschicht, die für das Kalibrieren des Stromzählers benötigt werden (DLT645), für das Auslesen und Konfigurieren aus der Ferne (DLMS/COSEM) bzw. für den Transfer der berechneten Energieverbrauchsdaten zwischen den beiden Mikrocontrollern auf der Smart Meter Hardware (MQTT-SN). Die Utilities-Schicht enthält Hilfskomponenten, die weder hardwareabhängig noch anwendungsspezifisch sind. Darüber befindet sich die Metrology-Schicht (Metrology). Sie enthält für jeden zu bestimmenden Energieverbrauchswert eine dedizierte Komponente, die für dessen Berechnung zuständig ist.

Die Ergebnisse werden über entsprechende Schnittstellen an die Applikationsschicht durchgereicht. Diese umfasst alle diejenigen Komponenten, die für die verschiedenen nachgelagerten Analyse- und Konfigurationsfunktionen zuständig sind und die über die Kommunikationsschicht eingehenden Fernauslese-, Fernkonfigurations- und Kalibrieranforderungen bearbeiten und beantworten.

Dank der von mbeddr angebotenen C-Spracherweiterung für Komponenten und Schnittstellen war es möglich, die vorstehend beschriebene Architektur 1:1 im Code umzusetzen. Dabei wurde das Konzept “component” zur Implementierung der Komponenten benutzt und das Konzept “composite component” zur Anordnung derselben in Schichten. Durch die Aufteilung in Komponenten konnte die Implementierung der Smart Meter Software und deren inheränte Komplexität auf verhältnismäßig leicht überschaubare und weitestgehend voneinander entkoppelte Einheiten heruntergebrochen werden. Mit Hilfe der “composite components” konnten diese zu einem hierarchisch aufgebauten Gesamtsystem zusammengesetzt werden, dessen innere Struktur einfach nachvollziehbar bleibt.

Sämtliche Interaktionen zwischen den Komponenten erfolgen über explizit festgelegte Schnittstellen, die die Komponenten bereitstellen (“provides”) bzw. nutzen (“requires”) können (siehe Bild 3 und 4 in der Bildergalerie). Für die Definition von Schnittstellen bietet mbeddr zwei alternative Konzepte: zum einen das “client/server interface” für Schnittstellen mit Operations-Aufruf-Semantik und zum anderen das “sender/receiver interface” für datengetriebene Schnittstellen. Dadurch können direkte Abhängigkeiten zwischen den Implementierungen der Komponenten vollständig vermieden werden. Jede Komponente kann leicht durch eine alternative Implementierung ersetzt werden. Einzige Voraussetzung ist, dass beide dieselben Schnittstellen bereitstellen bzw. nutzen.

(ID:44309111)