CMSIS-Packs – die Hintergründe

Insider’s Guide to CMSIS-Packs in Arm-Keil-MDK

26. Januar 2026, 8:30 Uhr | Colin Funnell, Senior Development Engineer bei Hitex / ak
© 02/stock.adobe.com

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?

Diesen Artikel anhören

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.

Bild 1. Manueller Workflow ohne CMSIS-Packs: Lange Zeiträume, hohe Komplexität.
Bild 1. Manueller Workflow ohne CMSIS-Packs: Lange Zeiträume, hohe Komplexität.
© Hitex

Was ist ein CMSIS-Pack?

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.

Bild 2. Workflow mit CMSIS-Packs. Effizient und fokussiert auf die eigentliche Entwicklung.
Bild 2. Workflow mit CMSIS-Packs. Effizient und fokussiert auf die eigentliche Entwicklung.
© Hitex

Wo werden CMSIS-Packs eingesetzt?

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.

Bild 3. Beispielhafte Struktur eines CMSIS-Packs.
Bild 3. Beispielhafte Struktur eines CMSIS-Packs.
© Hitex

Was ist in einem CMSIS-Pack enthalten?

Der Inhalt eines CMSIS-Packs ist nichts Magisches. Ein CMSIS-Pack ist letztendlich eine ZIP-Datei mit einem spezifischen Namensschema:

  • <Hersteller>.<Paketname>.<Paketversion>.pack

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.

Einige Details zur Pack-Beschreibung

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.

  • Versionierung: Die Packdatei enthält eine Versionsnummer im Dateinamen und ein Versionsfeld in der .pdsc-Datei. Auch die einzelnen Elemente innerhalb des Packs können eine eigene Versionierung haben. So lässt sich ein Paket mit vielen Elementen aktualisieren, wobei die Elemente, die sich nicht geändert haben, in der gleichen Version wie zuvor bleiben. Vom Benutzer konfigurierbare Header-Dateien können eine eigene, unabhängige Version haben, um den Übergang der Konfiguration zu kontrollieren. Die Grundlagen sind vor allem die Prüfung auf ein anderes CMSIS-Pack oder einen anderen Typ sowie eine Mindestversion. Es lassen sich auch Tests für die verwendete MCU-Klasse und den gewählten Compiler durchführen.
  • Quellenspeicherort: Ein wichtiger Bestandteil ist die Angabe des Speicherorts, an dem weitere Packs zu finden sind. Dies kann ein öffentliches Verzeichnis, eine Master-Liste von Keil oder auch ein lokaler Dateispeicher der eigenen Organisation sein.
  • Lizenzvereinbarungen: Eine Lizenzdatei ermöglicht es Nutzern, die Lizenzbedingungen einzusehen und aktiv zu akzeptieren, bevor sie das Paket verwenden.
  • Device Family Pack (DFP): DFPs enthalten Startdateien für spezifische MCU-Familien, um Entwicklern die Arbeit mit neuen Derivaten zu erleichtern. Er kann direkt mit der Entwicklung seines Codes beginnen, ohne sich um anfängliche Stack-Pointer und andere Low-Level-CPU-Details kümmern zu müssen.
  • Application Programming Interfaces (APIs): Schnittstellendefinitionen haben ihre eigene Klasse innerhalb der CMSIS-Pack-Deskriptoren. Zusammen mit den Versionsinformationen ermöglicht dies dem Anwendungscode die Auswahl der API, mit der er interagieren soll.
  • Middleware: Weil die MCUs immer leistungsfähiger und die Peripherien immer komplizierter werden, sind große Mengen an Code nötig, um sie zu nutzen. Die Arm-Compiler-Toolchain bietet eine Reihe nützlicher Middleware wie Netzwerkprotokolle und Dateisysteme, die sich gut in die zugrunde liegenden CMSIS-Treiber einfügen.
  • Board Support Packages (BSP): Dieser Abschnitt von .pdsc enthält Dateien, die sich auf die Verwendung spezifischer Board-Hardware und die darin enthaltenen Geräte beziehen. Ideal für Halbleiterhersteller, die ein Dev-Kit haben, das viele verschiedene Core-Bausteine oder auch viele verschiedene Boards unterstützen kann.
  • Beispiele und Vorlagen: Nützliche Vorlagen und Beispielcodes sind eine willkommene Ergänzung für Entwickler, die neue Funktionen schnell ausprobieren wollen. Durch deren Definition in den Packs können IDEs, mit entsprechender Funktion, von hohem Nutzen für Entwickler sein.
Funnell Colin
Colin Funnell, Absolvent der Coventry University, begann seine Karriere in der Telekommunikationsbranche und war an der Entwicklung von Hochgeschwindigkeitsprodukten mit elektrischen, optischen und photonischen Technologien beteiligt. Für seine Leistungen erhielt er den Preis »Outstanding Contribution to Optical Networks«. Seit 15 Jahren ist er bei Hitex tätig, wo er Schaltungen entwickelt und Software schreibt, mit einem Fokus auf Arm-Systeme und deren praktische Anwendungen. Hitex ist offizieller Distributor von Arm in Deutschland und den Niederlanden und seit über 35 Jahren Partner für Arm/Keil-Technologie, Beratung, Schulungen und Arm-Entwicklungswerkzeuge sowie bewährte, einsatzbereite Software-Komponenten.
© Funnell Colin

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.

Zusammenfassung

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


Lesen Sie mehr zum Thema


Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Hitex GmbH

Weitere Artikel zu Embedded

Weitere Artikel zu Echtzeit-/Embedded Software