Experience Embedded

Professionelle Schulungen, Beratung und Projektunterstützung

Embedded-Software-Entwicklung

Eingebettete Systeme werden typischerweise in dezentralen Baugruppen für die Steuerung, Regelung und Überwachung von Geräten eingesetzt.

Embedded-Software ist die Software, die speziell für eingebettete Systeme erstellt wird.

Standard-SW vs. Embedded-SW 

Bild 1: Standard-SW vs. Embedded-SW

Unterschied zwischen Standard-Software und Embedded-Software

Bei der Programmierung von klassischer Software werden Programmiersprachen wie z.B. ANSI-C, C++, Java, Python, etc. verwendet. Die generierte Software wird dann typischerweise in einem PC-basierenden System (Desktop oder Notebook) abgearbeitet.

Die Reaktionszeit der Software hängt bei der Abarbeitung im Desktop oder Notebook maßgeblich von folgenden Aspekten ab: Architektur des Rechenkerns (Singlecore-, Multicore-Architektur), mögliche Arbeitsgeschwindigkeit (maximale CPU-Taktung) des verfügbaren Arbeitsspeichers, des verwendeten Betriebssystems und der Menge an Applikationen, die parallel ausgeführt werden sollen. Jeder zuvor genannte Aspekt beeinflusst die Arbeitsgeschwindigkeit der Applikationen.

Anforderungen in der Embedded-Software-Entwicklung

Eine typische Anforderung an Embedded-Systeme ist die Realzeit-Fähigkeit (Echtzeit-Fähigkeit).Eine Verarbeitung mit nicht vorhersagbarer Verarbeitungsgeschwindigkeit kann nicht toleriert werden. Viele Applikationen (insbesondere Steuerungen in sicherheitsrelevante Systemen – also Systeme, durch die ein Mensch gefährdet, verletzt oder sogar getötet werden könnte) setzen eine vorhersagbare Reaktionszeit des Systems voraus.

Die Bremsen in einem Auto müssen z.B. mit sehr kurzer Verzögerung (im Bereich von Millisekunden) auf das Bremsen des Fahrers reagieren. Eine Steuerung mit einem PC könnte diese Realzeit-Vorgabe (Real-time Requirement) nicht garantiert erfüllen.

Bei der Entwicklung von Software für ein Embedded-System besteht die Möglichkeit, die Programme so zu erstellen, dass die Verzögerungszeit bzw. Verarbeitungszeit eines Embedded-Systems genau bestimmt werden kann. Dazu gehört beispielsweise, dass ein Eingangssignal (z.B. das Signal eines Schalters) erkannt und mit einer maximalen Reaktionszeit das Motor-Aus-Signal an einem Embedded-System-Ausgang generiert werden kann. Dies gilt auch für die Reaktionszeit bei der Inter-Modul-Kommunikation oder dem Austausch von Telegrammen zwischen Interface- und Steuermodulen über Bussysteme wie USB, Ethernet, CAN, LIN, etc.

Embedded-Software-Entwicklung: typische Anwendungen

  • Automobiltechnik: Vernetzung und Betrieb von Steuermodulen im Fahrzeug
  • Haushaltsgeräte: Steuerungen von Waschmaschinen, Geschirrspülern und Kühlgeräten
  • Unterhaltungselektronik (Braune Ware): Digitale Radios, Fernseher, Book-Reader, Set-Top-Boxen
  • Telefone und Interface-Geräte: Handys, Smartphones, Tablets, Gateways (z.B. Fritz-Boxen)

Software-Tools für die Embedded-Software-Entwicklung

Standard-Software-Tools müssen für die Anwendung in Embedded-Systemen erweitert werden. Damit die Architektur von Mikrocontroller-Systemen und deren Vorzüge bei der Abarbeitung von Programmen optimal genutzt werden können, sind z.B. beim Compiler Erweiterungenzum ANSI-C-Standard nötig. Mit diesen Erweiterungen kann der Programmierer die Leistung (Performance) der Software (Geschwindigkeit bei der Abarbeitung in der CPU) gezielt beeinflussen. Diese Art der Software-Erstellung, die die Architektur und das Verhalten des verwendeten Mikrocontrollers berücksichtigt, wird als hardwarenahe Programmierung bezeichnet.

Embedded-Software-Programmierung 

Bild 2: Embedded-Software-Programmierung

Anbieter von Embedded-Compilern erweitern die Funktionalität von ANSI-C durch Typ-Kennzeichner (Type Qualifiers) für die Zuweisung einer Variablen oder eines Programms (Funktion) zu einem speziellen Speicherbereich resp. Speicher-Adressraum (so genannte Address Space Qualifier).

Mit der Verwendung von Address Qualifiern generiert der Compiler jeweils spezielle Speicher-Sektionen, die durch den Linker/Locator in architekturspezifische Adressräume lokatiert werden können. Eine weitere Verwendung ist der Einsatz von Type Qualifiern für Programme (Function Qualifier). Mit diesen Qualifiern kann zwischen normalen Funktionen und einer Interrupt-Funktion unterschieden werden. Embedded-Compiler generieren je nach verwendeten Qualifiern unterschiedlichen Operations-Code für die Funktions-Return-Befehle (Return Instructions).

Compiler für Embedded-Architekturen unterstützen spezielle Datentypen (Erweiterungen zu ANSI-C). Der Einsatz dieser Datentypen ermöglicht es dem Programmierer beispielsweise, neben Floating-Point-Arithmetikauch die Fix-Komma-Arithmetik einzusetzen. Dieser Arithmetik-Typ ist die Basis für DSP-Filter-Berechnungen(Digital Signal Processing).

Mit der Verwendung von "volatile" bei der Definition von Zeigern (Pointern) auf absolute Adressen kann der Embedded-Programmierer absolute Adressbezüge zur Platzierung von Peripherien in einer Mikrocontroller-Architekturherstellen. Damit wird es möglich, ein Mode-, Control- und Status-Register in einer speziellen Mikrocontroller-on-Chip-Hardware (z.B. ein Interrupt-Status-Register eines speziellen Timers oder ein Output-Register eines speziellen I/O-Ports) anzusprechen. Volatile verhindert dabei, dass der Compiler optimierte Zugriffe auf Variable verwendet. Stattdessen wird bei jeder erneuten Abfrage eines Speicherzustandes innerhalb einer Programmschleife (Software-Polling) garantiert neu auf das Peripherie-Register zugegriffen. Somit lässt sich in der Software-Schleife eine Änderung einer Peripherie-Statusvariablen erkennen.

Hardwarenahe Embedded-Software-Entwicklung

Die Embedded-Software-Entwicklung bietet eine Menge an Möglichkeiten zur Programmierung hardwarenaher Software – d.h. Software, die die individuelle Architektur eines Mikrocontrollers optimal und sicher ausnutzt. Fehlerhafte Anwendung von Software in Embedded-Systemen kann zu unvorhersehbaren Fehlern führen, die unter Umständen erst sehr spät im Projekt gefunden werden. Eine zielführende und erfolgreiche Anwendung von Embedded-Software setzt eine intensive Beschäftigung mit den Auswirkungen, den Chancen und den Risiken voraus.  

Fachwissen zur Embedded-Software-Entwicklung

Basis für eine erfolgreiche Embedded-Programmierung sind umfangreiche Kenntnisse – von der Mikrocontroller-Architektur, dem Anforderungsmanagement (Requirements Engineering) und dem Architektur-Design bis hin zu den Werkzeugen zur Embedded-Programmierung (Compiler, Linker / Locator, Debugging- und Test-Werkzeuge). Den richtigen Zugang zu all diesen notwendigen Kenntnissen und Fähigkeiten bietet der Besuch eines Trainings für die Embedded-Programmierung. 

Wenn Sie auf der Suche nach Unterstützung sind oder sich einen schnellen und erfolgreichen Einstieg in die Welt der Embedded-Software-Programmierung wünschen, dann besuchen Sie ein Seminar oder einen Workshop für die Embedded-Softwareentwicklung.

In kompakter Form werden alle notwendigen Kenntnisse - vom Einfluss einer Mikrocontroller-Architektur, der Notwendigkeit des Anforderungsmanagements (Requirements Engineering), Sinn und Vorgehensweise des Architektur-Designs bis hin zum Einsatz von Embedded-Programmier-Werkzeugen (Compiler, Linker / Locator, Debugging- und Test-Werkzeuge) vermittelt.

MicroConsult unterstützt Sie mit Training & Coaching rund um die Embedded-Software-Entwicklung, z.B. zu folgenden Themen:


Training & Coaching - auch im Live-Online-Format - zu den weiteren Themen unseren Portfolios finden Sie hier.


Embedded-Software-Entwicklung: Workshops

Darüber hinaus besteht die Möglichkeit, das Themenfeld Embedded-Software-Entwicklung auch in maßgeschneiderten Workshops zu behandeln. Sie werden auf die speziellen Bedürfnisse von Aufgaben, Projekten, Teams und Rollen zugeschnitten.

Wenden Sie sich an uns mit Ihren Fragen, Wünschen und Anforderungen - wir stehen Ihnen unter Tel. +49 (0)89 450617-71 gern zur Verfügung. Oder senden Sie uns das Kontaktformular.


Autor:
Dipl.-Ing. Ingo Pohle ist Mitgründer und Geschäftsführer der MicroConsult GmbH. Er ist ein international anerkannter Spezialist für Embedded-Lösungen mit reichem Erfahrungsschatz rund um den Einsatz von Embedded-Mikrocontrollern, Bussystemen und RTOS.