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?

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.

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.

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
Das GNU-Projekt sollte den Grundstein legen für Software, deren Quellcode frei einsehbar sein soll sowie - unter bestimmten Bedingungen - verändert und für andere Projekte genutzt werden kann. Was vor 35 Jahren revolutionär war, ist heute weitgehend etabliert - auch in einer Industrie, die sich einst massiv gegen den Gedanken freier Software wehrte.

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.

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?

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.

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
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.

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
Ein einfacher Algorithmus kann sehr kompliziert zu verstehen sein, wenn die Schreibweise nicht den Erwartungen entspricht.

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
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.

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
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.

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
Syntaktische Elemente wie Arrays (bzw Vektoren) oder Pointer (bzw. Zeiger) sind beim Programmieren mit C essentiell.

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
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.

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
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
Der Umstieg auf C++ kann für die Embedded-Entwicklung einige Hürden beinhalten.

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
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.

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
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.

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
Auch unter Linux sind - unter den richtigen Voraussetzungen - harte Echtzeitanforderungen erfüllbar.

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

Embedded Linux – Kernel, Aufbau, Toolchain

Wenn Linux in einem Embedded System eingesetzt werden muss, sind die Ressourcen deutlich beschränkter als in einem Desktop- oder Server-System. Worauf kommt es im Embedded Linux hinsichtlich Kernel, Bootloader oder Root-Filesystem genau an?

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?

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