C++-Metaprogrammierung mit Templates für Embedded Systems

Hardwarenah bedeutet meist hardwarespezifisch zu programmieren. Mehr Portabilität bei gleichbleibend schlanken Binaries bietet dagegen modernes C++.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht
C++-Metaprogrammierung mit Templates für eingebettete Systeme
Lesezeit: 16 Min.
Von
  • Tobias Kotulla
  • Dirk Petrautzki
Inhaltsverzeichnis

Quellcode, der auf unterschiedlichen Architekturen übersetzt werden soll, muss einfach portierbar sein. Das lässt sich in der Welt der eingebetteten Systeme aber oft nur schwer erreichen. Die Embedded-Programmierung verleitet Entwickler schnell dazu, die Grenzen klarer Strukturierungen aufzuweichen und hardwarespezifischen Code zu schreiben, da sie sich gedanklich tief in der Ebene der Hardware befinden. Das erschwert oder verhindert eine zukünftige Portierung. Modernes C++ bietet hierfür einen Ausweg, der Entwickler – beim Umsetzen eines guten Grundmodells – dazu zwingt, sich an klare Abgrenzungen zu halten und dadurch die Portierbarkeit zu gewährleisten.

Mit dem Einsatz von C++ statt C und der Schaffung zusätzlicher Abstraktionsebenen stellt sich die Frage nach eventuellem zusätzlichen Speicherbedarf und der Auswirkung auf die Performanz. Der Artikel zeigt, dass mit Metaprogrammierung unter Verwendung von C++-Templates diese Befürchtung unbegründet ist.

Die Technik der Metaprogrammierung erlaubt es, Softwareschnittstellen für wiederkehrende Funktionen zu definieren, deren Implementierung sich bei der Änderung der Hardware unterscheidet. Durch die Definition der Schnittstelle ergibt sich einerseits ein einheitlicher Stil, der die Portierbarkeit gewährleistet, andererseits erzeugt dieser Ansatz keinen Overhead, da er durch den Einsatz von Templates den Compiler zur Auswertung zwingt, der dadurch keinen überflüssigen Code generiert.