Suchen
 Sebastian Gerstl ♥ Embedded Software Engineering

Sebastian Gerstl

Redakteur

Fachredakteur für Embedded Systeme und Software Engineering.

Artikel des Autors

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

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