Unser Werkzeugkasten für die Embedded Entwicklung
Die richtigen Werkzeuge griffbereit zu haben, steigert die Arbeitseffizienz sowie die Qualität und bringt den Fokus aufs Handwerk – so macht Arbeit Freude.
Für einen Handwerker ist ein gut ausgerüsteter Werkzeugwagen das A und O für seinen Erfolg. In der Softwareentwicklung ist dies gar nicht so anders, wobei unsere Werkzeuge konfiguriert werden müssen, Updates erhalten oder im schlechteren Fall der Support abgekündigt wird.
Abbildung 1 unten zeigt einen generellen Lebenszyklus einer Software detailliert im Bereich vom Entwickeln von Code. Darin erkennen wir immer wieder dieselben Tätigkeiten und Aufgaben. Für diese Tätigkeiten brauchen wir geeignete Werkzeuge in der richtigen Konfiguration und Version. Einige dieser Werkzeuge verfügen über Schnittstellen, die für bestimmte Tätigkeiten, Phasen oder sogar phasenübergreifend relevant sind. Dabei die Übersicht nicht zu verlieren, ist nicht immer trivial. In der Phase der Code-Entwicklung sind die Haupttätigkeiten das Schreiben, Verifizieren, Builden, Testen und Dokumentieren von Code. Für diese Tätigkeiten nutzen wir im Bereich Embedded eine inhouse entwickelte Plattform, welche ein Werkzeugset für unser Kerngeschäft bereitstellt.
Abbildung 1: SDLC detailliert im Bereich vom Entwickeln von Code
Dieses beinhaltet Visual Studio Code wobei wir auf das Konzept «Developing inside a Container» setzen. Dazu verwenden wir Docker-Container, welche wir auf Linux unter Windows-Subsystem (WSL) starten. Dank der Containerisierung können wir alle Werkzeuge sowie deren Version und Konfiguration zentralisiert verwalten und versionieren. Dies ermöglicht es uns bei Bedarf alte Stände unseres Werkzeugkastens abzurufen, ohne abhängig von externen Ressourcen zu sein.
Als Basis für die Entwicklung verwenden wir unser eigens entwickeltes «C++ Framework für embedded Anwendungen». Für STM32 spezifische Anwendungen und die Konfiguration des HAL, ist STM32CubeMX als wichtiger Bestandteil in unser Werkzeugset integriert.
Die Versionsverwaltung von unserem Sourcecode machen wir selbstverständlich mit Git.
Mittels pre-commit verwalten wir verschiedene Tools zur statischen Code Analyse und einheitlichen Formatierung des Sourcecodes gemäss unseren Codier-Richtlinien.
Für Tools die mit dem Sourcecode interagieren (Compiler, Code-Generatoren, Sourcecode Dokumentation, usw.) verwenden wir CMake als Buildsystem. Azure DevOps unterstützt uns bei einer reibungslosen Code-Integration und mittels Azure Pipelines können wir einen stabilen Entwicklungsstand wie auch reproduzierbare und einheitliche Deliverables gewährleisten.
Ein Entwicklungsvorgehen ohne Unit-Tests ist wie ein Werkzeugkasten ohne Messmittel – niemand weiss, was stimmt. Daher gehört bei uns die Unit-Test Bibliothek Google Test zur Standartausrüstung. Die Code-Abdeckung prüfen wir mit gcovr.
Um Softwarekomponenten einfacher warten und wiederverwenden zu können ist eine gute Dokumentation des Sourcecodes essenziell - dazu verwenden wir Doxygen.
Dank der Plattform beherrschen wir das effiziente Schreiben, Verifizieren, Builden, Testen und Dokumentieren und es ist nachvollziehbar und sauber verwaltet. Unser Wissen dazu und die Plattform haben wir bereits in verschiedenen Kundenprojekten eingesetzt.
Wir sind bestrebt diese Plattform stetig an neue Anforderungen und Möglichkeiten anzupassen, wo nötig neue Werkzeuge zu integrieren und ungenutzte zu entfernen.
So halten wir unseren Werkzeugwagen einsatzbereit, um eine effiziente Lösung für ihr nächstes Projekt zu realisieren.