Der Open-Source-Standard CMSIS (Common Microcontroller Software Interface Standard) bildet das Herzstück des Arm-Keil-MDK (Microcontroller Development Kit). Doch was sind CMSIS-Packs, wie lassen sie sich erstellen und nutzen, welche Chancen eröffnen sie, und welche Fallstricke sind zu erwarten?
Als Open-Source-Standard wird CMSIS öffentlich auf GitHub entwickelt. CMSIS-Packs bieten eine effiziente Möglichkeit, standardisierte Code-Bausteine und weitere Ressourcen strukturiert und verwaltet in Entwicklungsprojekte zu integrieren. Die Einsatzmöglichkeiten sind vielfältig: Sie reichen von Low-Level-Silizium-Startcode (Device Family Packs) und Board Support Packages (BSP) bis hin zu High-Level-Protokollen und -Services.
Durch die Nutzung von Open-CMSIS-Packs können Entwickler diese standardisierten Strukturen für ihre eigenen Projekte nutzen, um die Wiederverwendbarkeit von Software zu fördern. Doch obwohl dieser Ansatz zweifellos von Vorteil ist, bringt er auch eine gewisse Komplexität mit sich. Ziel der dreiteiligen Artikelserie ist es, diese Komplexität verständlich zu machen und die Anwendung zu erläutern. Der folgende erste Teil beginnt mit den Grundlagen. Es werden zwei weitere Teile folgen, in denen vermittelt wird, wie Entwickler eigene CMSIS-Packs erstellen können. Darüber hinaus werden Lösungen zur Vermeidung von Fallstricken bei der Verwaltung eigener CMSIS-Pack-Workflows aufgezeigt.
Der CMSIS-Standard wurde entwickelt, um einen konsistenten und vereinheitlichten Ansatz für die Entwicklung auf Arm-basierten Geräten verschiedener Hersteller zu ermöglichen. CMSIS umfasst eine Reihe von Technologien und Konventionen, die unterschiedliche Entwicklungsbereiche abdecken, darunter Gerätetreiber, Debugging, neuronale Netze, Echtzeit-Betriebssysteme oder Digital Signal Processing (DSP).
Die Aufgabe von CMSIS-Packs besteht darin, verschiedene Dateien auf konsistente Weise zu bündeln, und zwar so, dass andere Tools sie verstehen und nutzen können. CMSIS-Packs dienen als Verteilungsmechanismus für die CMSIS-Technologien und haben sich inzwischen von ihrer ursprünglich starken Bindung an die Arm-Toolchain gelöst. Als eigenständiges Projekt – bekannt als Open-CMSIS-Pack – sind sie mittlerweile ein flexibles Werkzeug, das über Arm-Cortex-M hinaus einsetzbar ist. Durch die größere Unabhängigkeit und Freiheit von der Release-Kadenz des Arm-Keil-MDKs wachsen die intern für CMSIS-Packs verwendeten Deskriptoren schnell an. Diese kontinuierliche Weiterentwicklung macht die CMSIS-Packs zu einem breit nutzbaren und leistungsfähigen Werkzeug.
Die Arm-Keil-Tools (MDK) nutzen CMSIS-Packs seit vielen Jahren als integralen Bestandteil ihres Kernsystems. Ursprünglich musste die MDK-Installation alles enthalten, was man für die Entwicklung einer großen Anzahl von Geräten brauchte. Dies führte zu großen Installationspaketen, von denen viele Entwickler nur einen Bruchteil tatsächlich benötigten. Mit der Einführung von CMSIS-Packs ließ sich dieses Problem lösen: Entwickler können gezielt Pakete auswählen, und Abhängigkeiten werden automatisch aufgelöst. Dies vereinfacht nicht nur die Verwaltung, sondern ermöglicht es Halbleiterherstellern auch, spezifischen Code für ihre Geräte eigenständig zu verwalten.
Die MDK-Tools hatten ihre eigenen Anforderungen, wie Flash-Programmierung, die dann in CMSIS-Packs umgesetzt wurden. Die grundlegenden Konzepte der Versionierung, der Abhängigkeiten, des Quellcodes und der Dokumentation wurden eingeführt. Im Laufe der Zeit wurden dann fortgeschrittenere Konzepte in das Pack-Management-System aufgenommen. Benutzer von Arm-Keil-µVision werden mit diesen Konzepten im Run Time Environment Manager und im Pack Installer vertraut sein. Die Möglichkeit, zwischen verschiedenen Versionen zu wechseln oder ein Projekt auf eine Reihe von Packs zu beschränken, ist äußerst nützlich. Angesichts der modernen Notwendigkeit, alle Komponenten der Software in einer SBOM zu erfassen, bietet die CMSIS-Pack-Verwaltung eine sofortige Übersicht über die verwendeten Komponenten.
Die wachsende Akzeptanz von CMSIS-Packs hat dazu geführt, dass sie auch von anderen Toolchains unterstützt werden. Selbst anbietergebundene Entwicklungsumgebungen profitieren von der standardisierten Struktur, weil Entwickler zwischen verschiedenen Arm-Derivaten wechseln können, ohne größere Anpassungen an ihren Projekten vornehmen zu müssen.
Der Inhalt eines CMSIS-Packs ist nichts Magisches. Ein CMSIS-Pack ist letztendlich eine ZIP-Datei mit einem spezifischen Namensschema:
Entwickler können eine .pack-Datei in .zip umbenennen, um sie selbst zu untersuchen. Darin befinden sich die Quelldateien des Urhebers sowie eine Pack-Beschreibungsdatei (.pdsc), die alle relevanten Informationen im XML-Format bereitstellt. Die .pdsc-Datei lässt sich wiederum in einem XML-Editor erkunden; sie enthält alle Details zur Beschreibung der Paketdateien, ihrer Verwendung und ihrer Attribute.
Für Nutzer von CMSIS-Packs wird all dies von IDEs verwaltet und versteckt. Selbst für Build-Flows, welche die CMSIS-Packs nicht von Haus aus verstehen, bietet die CMSIS-Toolbox Service-Programme, die bei der Verwaltung, Verwendung und Erstellung der CMSIS-Packs helfen. MDK-6 geht noch einen Schritt weiter und integriert die CMSIS-Toolbox als Mittel zur Steuerung von CMSIS-Packs hinter den Kulissen. Wer die CMSIS-Toolbox verwendet, nutzt die gleichen Werkzeuge wie MDK selbst.
Die CMSIS-Toolbox bietet auch ein eigenständiges CLI (Command Line Interface), das den gleichen Build wie die IDE erstellen kann, so dass Anwender problemlos zu einem Continuous Integration Server migrieren können.
Das Schema für die Pack-Beschreibung wird ständig weiterentwickelt und bietet immer mehr nützliche Methoden der Quellcode-Verwaltung, die von der CMSIS-Toolbox unterstützt werden.
CMSIS-Packs können viele verschiedene Arten von Code unterstützen und werden durch den Dateibündelungsmechanismus ausgeliefert. Die Teile der .pdsc-Datei beschreiben deren Aussehen und lassen sich mittels geeigneter Werkzeuge verwenden.
Diese und viele weitere Funktionen machen CMSIS-Packs zu einem leistungsstarken Werkzeug, nicht nur für die Nutzung, sondern vor allem auch für die Erstellung eigener wiederverwendbarer Software-Bausteine. Bevor Anwender ihre eigenen Packs erstellen, empfiehlt es sich, das Open CMSIS-Pack Repository zu besuchen, um die neuesten Schemata und Details zur optimalen Verwendung der Packs zu finden.
CMSIS-Packs sind ein Open-Source-Ansatz zur Bereitstellung strukturierter Software-Komponenten. Sie werden nicht nur als zentraler Bestandteil der MDK-Toolchain genutzt, sondern zunehmend auch in anderen Tools integriert. Durch die Möglichkeit, Software-Bausteine effizient zu organisieren und wiederzuverwenden, bieten CMSIS-Packs eine wertvolle Grundlage für eine moderne und skalierbare Software-Entwicklung.
Die Nutzung bestehender CMSIS-Packs ist nicht nur eine Möglichkeit, Entwicklungszeit zu sparen, sondern auch eine Chance, die eigenen Lösungen zu teilen und so die Wiederverwendung zu fördern.
Nützliche Links zu CMSIS-Packs
https://www.open-cmsis-pack.org
https://open-cmsis-pack.github.io/ Open-CMSIS-Pack-Spec/main/html/index.html
https://github.com/Open-CMSIS-Pack/ cmsis-toolbox/blob/main/docs/README.md
https://github.com/Open-CMSIS-Pack/ SW-Pack-HandsOn