In need for reliable Embedded Software?

Choose a Professional!

You can mass-produce hardware; you cannot mass-produce software; you cannot mass-produce the human mind.
Michio Kaku
amerikanischer Physiker

Hardwarenahe Software-Entwicklung

Requirements

Ein klare Festlegung der Anforderungen ist das Fundament für die nachfolgende Entwicklung. In der realen Welt werden sich diese Anforderungen vielleicht mehrmals im Laufe des Projektes ändern und unter Umständen erheblichen Mehraufwand benötigen. Um so wichtiger ist es, die ermittelten Anforderungen gut zu dokumentieren. Tools wie Codebeamer oder Jira können dabei hilfreich sein.

Systemdesign / Architektur

Eine gute Systemarchitektur ist die Grundlage für robuste, skalierbare und möglichst fehlerfreie Software. Tools wie UML / Enterprise Architekt (c) können bei der Entwicklung der Architektur unterstützen. Robuste Systeme können als "Barebone" aufgebaut sein oder mit Echtzeit-Betriebssystemen wie FreeRTOS. Beide Varianten haben Vor- und Nachteile. Es kommt auf den Anwendungsfall an.

Safety

Wenn die Gesundheit oder sogar das Leben von Lebewesen gefährdet ist, muss ein besonderes Augenmerk auf die Sicherheit gelegt werden. Normen wie IEC 61508 beschreiben das nötige Vorgehen bei der Entwicklung von Software in diesem sensiblen Bereich. Eine lückenlose Dokumentierung, robustes Design, sorgfältig erstellte Software, ein definierter Reviewprozess und 100% abdeckende Tests sind Pflicht. Tools wie statische und dynamische Codeanalysen können die Qualität der Software stark verbessern. MISRA für C oder C++ ist eine gute Grundlage für robuste Software.

Softwaredesign / Implementierung

Gutes Design verwendet definierte Schnittstellen. Module haben klar voneinander abgegrenzte Funktionalitäten. Es exitieren klare Hirarchien zwischen den Modulen. Insbesondere im Embeddedbereich hat sich das KISS-Prinzip bewährt. Vielfach kam in der Vergangenheit "C" zum Einsatz, mehr und mehr "C++". Für viele Anwendungen ist dynamischer Speicher nach wie vor tabu; trotzdem bietet "C++" eine gute Voraussetzung für robuste embedded Software. Versionskotrollsysteme wie "git" oder "subversion" sind unerlässlich für die Entwicklung im Team.

Dokumentation

Die lückenlose Dokumentierung der Systemarchitektur und des Designs ist wichtig. Ebenso müssen Schnittstellen lückenlos dokumentiert sein. Auch der Sourcecode sollte gut dokumentiert werden. Mit "Doxygen" gelingt das hervorragend. Triviale Kommentare sind nicht hilfreich. Kommentare, die unerwartete Konstrukte beschreiben oder komplexe Abschnitte erklaeren, koennen dagegen sehr hilfreich sein.

Tests

Eine hohe Abdeckung mit Unittests ist Voraussetzung für robuste Software. Diese sollten in einem Continous Integration Prozess zyklisch und automatisiert durchgeführt werden. Google Test mit Google Mock ist ein gutes Tool, um Unittests zu erzeugen.
Das Geheimnis des Erfolges liegt nicht darin, niemals Fehler zu machen, sondern niemals zweimal den gleichen Fehler zu machen.
Albert Einstein

Hardware-Entwicklung

Systemdesign

Als Grundlage für ein gutes Softwaresystem braucht es ein gutes Hardwaresystem. Mit Eagle oder heutzutage KiCad können aufwendige Schaltungen realisiert werden. Prozessoren wie beispielsweise der Familie STM32 mit Arm-Architektur können in vielen Systemen eingesetzt werden, von stromsparend bis safety.

Prototyping

Die Entwicklung von Hardware ist nicht mehr so kostenintensiv wie sie einmal war, dennoch sollte große Sorgfalt in das Hardwaredesign investiert werden. Prototypen sollten die Möglichkeit bieten, Fehler und problematisches Verhalten zu debuggen. Logicanalyser und Oszilloskop sind hilfreiche Werkzeuge bei der Fehlersuche.

Kontakt:

Wolfgang Vickermann

Gaudystr. 16

10437 Berlin

Tel: +49 30 48 48 79 87

Mob: +49 163 3 80 69 89

e-Mail: vickermann@embedded-softwaredesign.de

Gulp Profil: gulp.de/gulp2/g/spezialisten/profil/WolfgangVickermann