Sebastian Gerstl ♥ Embedded Software Engineering

Sebastian Gerstl

Redakteur

Fachredakteur für Embedded Systeme und Software Engineering.

Artikel des Autors

Subjektiv betrachtet hat so ziemlich jeder Entwickler seine persönlichen Favoriten, wenn es um Programmiersprachen geht. Aber welche Programmiersprachen werden ganz speziell in  Embedded-Software auch am häufigsten eingesetzt? (gemeinfrei)

Die am weitesten verbreiteten Embedded-Programmiersprachen 2020

Zum sechsten Mal hat IEEE Spectrum seine alljährliche Übersicht der am meisten genutzten Programmiersprachen vorgestellt. Dabei wurden neben einem Allgemeinen separate Rankings für Web-, Desktop-, Mobile- und Embedded-Anwendungen präsentiert. Während Python und C weiter dominieren, stellt ein anderer C-Ableger den größten Verlierer der Rangliste dar.

Weiterlesen
Vor 5 Jahren, am 29. Juli 2015, erfolgte der weltweite Launch von Windows 10 - Nutzer, die ine alte Windows-Version hatten, konnten das Betriebssystem sogar als kostenloses Update beziehen. Teil von Microsofts strategie, das 'letzte Windows' fortan als einheitliche, durchgängige Plattform anzubieten. (Microsoft)

5 Jahre Windows 10: Das „letzte“, ewige Windows?

Windows 10 feiert 5. Geburtstag: Am 29. Juli 2015 erschien die aktuelle Iteration des weltweit verbreitetsten Betriebssystems. Nach Aussage von Microsoft soll es „das letzte Windows“ sein: Das Betriebssystem wird als Service stetig mit Updates aktualisiert und erneuert. Anlass für einen Rückblick auf die nun bald 35-jährige Geschichte der Betriebssystemsfamilie.

Weiterlesen
Vom 7. bis 11. Oktober 1968 trafen sich international anerkannte Experten der Computerwissenschaften aus 11 Ländern zur 1. NATO Software Engineering Conference. Ihr Ziel Richtlinien für Strukturen, Entwicklungsmethoden, Qualitätssicherung und Projektmanagement der Softwareentwicklung zu schaffen. Zu sehen, von links nach rechts: J.W. Smith, M. Paul, A.J. Perlis, B. Randell, D.T. Ross, R.M. Graham, Dr. G. Goos, W. van der Poel, M.D. McIlroy und H.A. Kinslow. (Brian Randell, University of Newcastle-upon-Tyne)

Raus aus der Software-Krise: 50 Jahre Software-Engineering

In den 1960ern beginnen Computer, die Wirtschaft zu erobern. Doch die Softwareentwicklung steckt noch in den Kinderschuhen und verschlingt oft mehr Geld als die zugehörige Hardware. Eine NATO-Tagung in Garmisch-Partenkirchen sucht einen Ausweg: Die Computerlandschaft braucht Software-Engineering!

Weiterlesen
"GNU ist nicht UNIX": Mit der Ankündigung der Entwicklung eines freien Betriebssystems, dessen Code für alle Zeiten frei bleiben sollte, begann vor 35 jahren das Entwicklerprinzip der "Freien Software", aus dem später einmal "Open Source" hervorgehen sollte. (gemeinfrei)

35 Jahre GNU-Projekt: Ein Fanal für freie Software

„Free Unix!“: Mit diesem Aufruf rief der Hacker und Programmierer Richard Stallman am 27. 09. 1983 zur Entwicklung eines quelloffenen Betriebssystems auf. OS, Kernel, Compiler – der Quellcode der gesamten Software sollte offen einsehbar sein – und vor allem: frei!

Weiterlesen
Muster einer FPGA-basierten Hardware-Plattform für "Project Brainwave". Auf seiner Entwicklerkonferenz Build 2018 kündigte Microsoft an, seine KI-Plattform auch für Kunden zugänglich zu machen.  (Microsoft)

Brainwave: Microsofts KI-Projekt

Mit Projekt Brainwave bietet Microsoft eine FPGA-basierte Echtzeit-KI-Plattform in der Azure Cloud, mittels der Berechnungen mit möglichst geringer Latenzzeit durchführbar sein sollen. Was war ausschlaggebend für die Hardware-Wahl, und welche KI-Strategie verfolgt Microsoft? Ein Interview mit Doug Burger, Entwickler im Brainwave-Team.

Weiterlesen
Künstliche Intelligenz hat sich in rasender Geschwindigkeit vom Science-Fiction-Stilmittel zur praktischen Anwendbarkeit entwickelt. Schnellere Bandbreiten sowie leistungsfähigere Cloud-Abnindungen und Rechenzentrenmachen es möglich. Doch welche Ansprüche stellt KI an Hardware, und welche Technologien werden diesen am besten gerecht? (Clipdealer)

Welche Hardware eignet sich besser zur KI-Beschleunigung?

Moderne Hardwarebeschleuniger haben den praktikablen Einsatz von Künstlicher Intelligenz in IT und Industrie in greifbare Nähe gerückt. Doch welche Technologie eignet sich hierfür besser: GPUs, DSPs, programmierbare FPGAs oder eigene, dedizierte Prozessoren? ELEKTRONIKPRAXIS hat Hardwarehersteller und Embedded-Experten zu diesem Thema befragt.

Weiterlesen
Eingebettete Systeme sind in zahlreichen Gebieten anzutreffen, ob nun im Consumer-, Industrie, oder Automotive- bzw. Avionik-Bereich. Dabei ist es ein großer Unterschied, ob nun eine Kaffeemaschine oder ein Flugzeug gesteuert werden muss. Wer ein Embedded System entwickeln will muss daher erst einmal wissen, welche vielfältige Unterscheidungenes in diesem Bereich gibt. (Clipdealer)

Was ist ein Embedded System?

Ein eingebettetes System (englisch embedded system) ist ein binärwertiges digitales System (auch Computersystem genannt), das in ein umgebendes technisches System eingebettet ist und mit diesem in Wechselwirkung steht. Dabei übernimmt der Rechner meist Überwachungs-, Steuerungs- oder Regelungsfunktionen, ist oft aber auch für eine Form der Daten- bzw. Signalverarbeitung zuständig.

Weiterlesen
Wenn es um sichere Kommunikation im Internet der Dinge geht, liefern sich mehrere Protokolle derzeit einen eifrigen Wettstreit darum, sich als Standard zu etablieren. Das offene MQTT (Message Queue Telemetry Transport) verspricht, sich heir als populärer und leicht zugänglicher Ansatz durchzusetzen. Wir stellen das Kommunikationsprotokoll für das Internet of Things näher vor. (Clipdealer)

Was ist MQTT?

MQTT hat sich in den letzten Jahren zum Standardprotokoll für die IoT- bzw. M2M-Kommunikation von Geräten und Applikationen entwickelt. Doch was hat es mit dem Protokoll auf sich und wie setzt man es ein?

Weiterlesen
Ein einfacher Algorithmus kann sehr kompliziert zu verstehen sein, wenn die Schreibweise nicht den Erwartungen entspricht. (gemeinfrei)

10 kleine Dinge, die C++ einfacher machen

Die Einführung der Standards C++11/14/17 hat C++ merklich modernisiert. Nebst Sprachfeatures wie smart-pointers, move semantics und varaidic templates gibt es auch noch eine ganze Menge an kleineren Erweiterungen, die oftmals unter dem Radar fliegen. Aber gerade diese Features können helfen, C++ Code merklich zu vereinfachen und wartbarer zu machen.

Weiterlesen
Beispielablauf einer MQTT-Verbindung mit Publish und Subscribe. Mit der hier beschriebenen quelloffenen MQTT-Broker-Implementierung wird es möglich, MQTT-basierte Lösungen kostengünstig und Energie-effizient herunter zu skalieren und Internet-unabhängig zu betreiben. Als Controller für den WiFi Access Point und die Basis-Kommunikationsinfrastruktur genügt ein 2-Euro-Mikrochip.  (MQTT protocol example without QoS / Simon A. Eugster / CC BY-SA 4.0)

Ein MQTT Broker auf dem ESP8266: MQTT Goes Embedded

MQTT ist derzeit eines der populärsten Kommunikationsprotokolle für IoT-Anwendungen. Jede Kommunikation findet über einen zentralen Verteiler, den so genannten MQTT Message Broker, statt. Dieser Beitrag stellt die erste quelloffene MQTT-Broker-Implementierung für den WiFi-fähigen Controller ESP8266 vor.

Weiterlesen
Auf einem Embedded-Linux-System direkt lässt sich Software aufgrund der begrenzten Ressourcen nur schlecht debuggen. Das in Linux integrierte Tool GDB erlaubt, die Embedded Software über einen PC extern auf Fehler zu untersuchen. (Clipdealer)

Remote Debugging von Embedded-Linux-Systemen mit GDB

Software, die auf Embedded Systemen zum Einsatz kommt, wird in der Regel nicht auf diesen entwickelt. Trotzdem muss sie zuverlässig geprüft und von Fehlern befreit werden. In Linux ist hierfür bereits ein nützliches Tool integriert: Der GNU Universal Debugger (GDB).

Weiterlesen
Schnellste Reaktivität in kürzester definierter Zeitspanne: Bei Echtzeitsystemen kommt es auf schlanke. hochpräzise Abläufe an. Dabei wird unter anderem zwischen "harter" und "weicher" Echtzeit unterschieden. (gemeinfrei)

Echtzeit: Grundlagen von Echtzeitsystemen

Unter Echtzeit versteht man die Anforderung an ein Rechensystem, innerhalb einer kürzesten definierten Zeitspanne korrekt zu reagieren. Weitere wichtige Konzepte sind "harte" und "weiche" Echtzeit sowie Ereignissteuerung und Zeitsteuerung.

Weiterlesen
 (gemeinfrei/Pixabay)

Echtzeit mit Linux

Mit Linux können Systeme mit harten Echtzeit-Anforderungen einfach umgesetzt werden. Doch welcher Ansatz ist der richtige? Und welche Latenzzeiten können damit erreicht werden?

Weiterlesen
Der Umstieg auf C++ kann für die Embedded-Entwicklung einige Hürden beinhalten. (gemeinfrei)

C++ in Embedded Systemen: Lessons Learned!

Zahlreiche Unternehmen steigen inzwischen für die Embedded-Firmware-Entwicklung von C auf C++ um. Mit C++ lässt sich Firmware entwickeln, die sicherer und expressiver ist. Doch einige Features können sich als zweischneidiges Schwert entpuppen.

Weiterlesen
Syntaktische Elemente wie Arrays (bzw Vektoren) oder Pointer (bzw. Zeiger) sind beim Programmieren mit C essentiell.  (gemeinfrei)

C programmieren: Arrays, Pointer, Records und Typdefinitionen

Ohne Datentypen funktioniert in C nichts. Elemente wie Arrays und Zeiger bzw Pointer oder Strukturen zählen zu den wichtigsten Bausteinen der Programmiersprache. Zum Abschluss der syntaktischen Elemente von C wollen wir daher auf diese Dateitypen näher eingehen - und auch den Präprozessor zur Code-Vorverarbeitung kurz erklären.

Weiterlesen
Um moderne Safety-Normen zu erfüllen wird häufig nur eine Tracebility Matrix in Form einer Excel-Tabelle verwendet. Doch meist reichen solch simple Maßnahmen für ein funktionell sicheres System nicht aus. (SODIUS WILLERT SAS)

Drei Wege zur Requirements Traceability Matrix

Um Safety-Normen wie ISO 26262 oder IEC 61508 zu erfüllen, ist eine nachweisliche Rückverfolgbarkeit der Anforderungen nötig. Dabei wird häufig auf eine Tracebility Matrix in Form eines Excel-Sheets zurückgegriffen. Doch auch wenn man damit die Normen nominell erfüllt, reicht dies für ein funktionell wirklich sicheres System meist nicht aus.

Weiterlesen
Unit Tests bzw Funktionsstests sind gerade bei sicherheitskritischen Anwendungen essentiell. Doch gerade hardwarenahen oder echtzeitkritischen C-Code effizient zu testen gestaltet sich oft als schwierig. Mit einigen Tricks aus dem Repertoire von C++ kann dies aber auch elegant gelingen. (Clipdealer)

Effizient zum Unit-Test unter C++ und C

Continuous Integration und automatisierte Tests sind erprobte Mittel, um die Qualität von in C oder C++ geschriebenem Code zu fördern. Gerade den automatisierten Unit-Tests kommt große Bedeutung zu, garantieren sie doch als Basis der Testpyramide auch die Basis der Qualität. Ein Beispiel aus der Entwicklerpraxis.

Weiterlesen
 (Clipdealer)
Linux-Grundlagen

Yocto – Linux im Eigenbau

Yocto hat sich auf dem Embedded-Markt weitgehend als Standardlösung etabliert, wenn es um die Distribution von Linux in Form von Board-Support-Packages (BSPs) geht. Doch was hat es damit genau auf sich und was gibt es zu beachten, wenn man Yocto für seine Embedded-Linux-Lösung einsetzen möchte? Eine kleine Übersicht.

Weiterlesen
Speicherzuweisung: Durch die engen Ressourcenvorgaben und hohen Echtzeitansprüche in Embedded Systemen muss die Speicherzuweisung möglichst exakt erfolgen. In C und C++ kann ein fragmentierter Speicherpool allerdings unerwartete Allokationsfehler hervorrufen, die es dringend zu vermeiden gilt. (Clipdealer)

Dynamische Speicherzuweisung und -fragmentierung in C und C++

In C und C++ kann es sehr komfortabel sein, Speicherblöcke nach Bedarf zu allokieren und wieder freizugeben. Der Umgang mit einem dynamischen Speicher kann jedoch problematisch und ineffizient sein. Bei Desktop-Anwendungen mit ihrem frei verfügbaren Speicher können diese Probleme ignoriert werden. Für Embedded-Anwendungen – meist Echtzeitapplikationen – ist das aber keine Option.

Weiterlesen
Subjektiv betrachtet hat so ziemlich jeder Entwickler seine persönlichen Favoriten, wenn es um Programmiersprachen geht. Aber welche Programmiersprachen werden ganz speziell in  Embedded-Software auch am häufigsten eingesetzt? (gemeinfrei)

Die am weitesten verbreiteten Embedded-Programmiersprachen 2020

Zum sechsten Mal hat IEEE Spectrum seine alljährliche Übersicht der am meisten genutzten Programmiersprachen vorgestellt. Dabei wurden neben einem Allgemeinen separate Rankings für Web-, Desktop-, Mobile- und Embedded-Anwendungen präsentiert. Während Python und C weiter dominieren, stellt ein anderer C-Ableger den größten Verlierer der Rangliste dar.

Weiterlesen
100 Prozent Codeabdeckung beim Testen - diesem hehren Qualitätsziel jagen viele Softwareentwickler oft geradezu fanatisch hinterher. Doch das unbedingte Drä#ngen auf Vollständigkeit kann fast ebenso fatal sein, wie die Code Coverage vollkommen zu ignorieren. (Clipdealer)

Die zwei großen Fallen bei der Code Coverage

Manche meinen, dass nur 100%-ige Code Coverage auch für gute Softwarequalität stehen kann. Andere haben ihre Codeabdeckung dagegen gar nicht im Blick. Beides kann aber letztendlich für die Softwarequalität und -Sicherheit fatal sein.

Weiterlesen
Einzelne Vorgänge innerhalb eines Embedded-Systems nachzuvollziehen oder zu analysieren kann sich als Herausforderung gestalten. Linux bietet nativ bereits eine Tracing-Infrakstruktur und hält eine Reihe von Tracing-Tools bereit, mit der sich Eriegnisse gezielt steuern oder überprüfen lassen. (gemeinfrei)

Einführung in die Linux Tracing Infrastruktur

Linux bietet mit seiner Tracing-Infrastruktur ein sehr mächtiges Werkzeug zur Analyse beliebiger Vorgänge innerhalb des Betriebssystems. Dieser Beitrag verschafft einen groben Überblick über die im Betriebssystem verfügbaren Tracing-Hilfsmittel und deren Bedienung.

Weiterlesen
Software Design Patterns bzw. Entwurfsmuster versprechen schnell anwendbare, vorgefertigte Lösungen in der objektorientierten Programmierung. Doch die praktische Anwendung von Patterns erweist sich oft schwieriger als gedacht. (Clipdealer)

Software Design Patterns

Viele Entwickler besitzen einen Vorrat an allgemein anwendbaren Entwurfsmustern, mit deren Hilfe flexible, leicht anpassbare und gut wartbare Applikationen entwickelt werden können. Aber der Versuch, diese Software Design Patterns in der Praxis anzuwenden, stellt sich oft schwieriger heraus als erwartet. Dies kann viele Ursachen haben.

Weiterlesen
Go (stabile Version seit 2012) und Rust (stabile Version seit 2015) sind noch relativ jung. Wieso könnte es sich in der Software-Entwicklung lohnen, auf solche modernen Programmiersprachen zu setzen? (Go's new brand / Google – Steve Francia / CC BY 3.0)

Go und Rust: Einsatz moderner Programmiersprachen

Rust und Go sind zwei moderne Vertreter von Programmiersprachen, die sich an Anforderungen und Bedürfnisse richten, die mit etablierten Sprachen wie Fortran, C oder C++ nicht so leicht umzusetzen sind. Was ist beim Programmierne mit Go oder Rust zu beachten?

Weiterlesen
Vermeidung von Legacy Code: Das altbekannte Vier-Augen-Prinzip ist oft Schlüssel zum Erkennen und Bewerten von Problemen. (Matej Kastelic / Clipdealer)

Alptraum Legacy Code – Wie Profis damit umgehen

Legacy Code bringt oft gewaltige Probleme bei der Entwicklung neuer Features mit: Variablen tragen nichtssagende Namen, Methoden sind zu überkomplexen Konstrukten mutiert und automatisierte Tests sind meist wenig bis gar nicht vorhanden. Wie geht man damit um?

Weiterlesen
Vom 7. bis 11. Oktober 1968 trafen sich international anerkannte Experten der Computerwissenschaften aus 11 Ländern zur 1. NATO Software Engineering Conference. Ihr Ziel Richtlinien für Strukturen, Entwicklungsmethoden, Qualitätssicherung und Projektmanagement der Softwareentwicklung zu schaffen. Zu sehen, von links nach rechts: J.W. Smith, M. Paul, A.J. Perlis, B. Randell, D.T. Ross, R.M. Graham, Dr. G. Goos, W. van der Poel, M.D. McIlroy und H.A. Kinslow. (Brian Randell, University of Newcastle-upon-Tyne)

Raus aus der Software-Krise: 50 Jahre Software-Engineering

In den 1960ern beginnen Computer, die Wirtschaft zu erobern. Doch die Softwareentwicklung steckt noch in den Kinderschuhen und verschlingt oft mehr Geld als die zugehörige Hardware. Eine NATO-Tagung in Garmisch-Partenkirchen sucht einen Ausweg: Die Computerlandschaft braucht Software-Engineering!

Weiterlesen
Linux-Systemanalyse und Debug mit dem Tool gdb: Wer Systemfehlern auf den Grund gehen und sie effizient beheben möchte, ist bei dem Seminar Diagnose von Linux bestens aufgehoben. (GDB Command: Info locals / Linux Screenshots / CC BY 2.0)
Seminar-Tipp

Diagnose von Linux

Systemfehler können sich vielfältig äußern, sei es dass eine Anwendung langsam läuft, eine Applikation abschmiert oder eine Kernel Panic das ganze System in den Abgrund reißt. Doch wie findet man heraus, wo genau die Ursache liegt?

Weiterlesen
Die Standardreihe ISO 29119 besteht im Wesentlichen aus fünf Teilen. In der Illustration zu sehen: Struktur und Zusammenspiel der einzelnen Teile von ISO/IEC/IEEE 29119. (EuroStarConferences.com)

Kurzüberblick zur Standardreihe ISO/IEC/IEEE 29119

Verifikation durch Testen ist eine wichtige Phase im Software-Lebenszyklus. Die Standard-Reihe ISO/IEC/IEEE 29119 gibt international anerkannte Empfehlungen zum Thema Softwaretesten. Die beschriebenen Prozesse, Methoden und Techniken können von jedem Entwickler oder Verifikationsteam angewendet werden.

Weiterlesen
Entgegen geläufiger Vorurteile lässt sich C++ auch in Deeply Embedded Systemen, die mit geringsten Platz- und Ressourcenansprüchen auskommen müssen – wie beispielsweise Hörgeräten – effizient einsetzen. Die objektorientierte Sprache kann hier sogar zusätzlichen Nutzen bieten. (gemeinfrei)

C++ in Deeply-Embedded-Systemen

Tief eingebettete Systeme werden meist in C implementiert. Wieso ist das so? Könnten solche Systeme nicht auch von C++ profitieren? Ein Beitrag aus der praktischen Erfahrung bei der Umstellung einer umfangreichen, produktiven Deeply-Embedded-Codebasis von C auf C++.

Weiterlesen
 (Johannes Nicolai / GitHub)

Continuous Delivery für embedded C/C++-Entwickler

Dependency Management ist eine unabdingbare Voraussetzung für Continuous Delivery. In der traditionellen eingebetteten Programmierung werden dafür geeignete Tools noch höchst zögerlich eingesetzt. Dieser Artikel stellt einen Ansatz basierend auf dem Open Source-Werkzeug conan.io vor, der speziell für die cross-platform Umgebungen von C und C++-Programmierern entwickelt wurde

Weiterlesen
Mit zunehmender Komplexität der Softwarestrukturen müssen sich Entwickler stärker mit geänderten Anforderungen an Automotive-Software-Architekturen auseinandersetzen. (Clipdealer)

(R)Evolution der Automotive-Software-Architekturen

Mit dem Einzug von prozessorbasierten Plattformen im Fahrzeug findet eine Leistungsexplosion hinsichtlich Speicher, Rechenleistung und Konnektivität statt. Dies lässt aber auch die Software-Komplexität gewaltig ansteigen. Um dem Herr zu werden, müssen sich Entwickler stark auf spezielle Automotive-Software-Architekturen fokussieren.

Weiterlesen