Embedded Softwareentwicklung
Embedded Softwareentwicklung aus Stuttgart für Kunden in aller Welt
Wir übernehmen für Sie den komplette Softwareentwicklungslebenszyklus (SDLC) und arbeiten dabei nach Entwicklungsmodellen wie Wasserfall, Agile, Scrum oder Lean.
Embedded Software oder auch Firmware ist Software, die in eingebetteten Systemen wie Mikrocontrollern, Sensoren und Aktoren in Geräten wie Autos, Smartphones und Haushaltsgeräten läuft.
Unser Skillset
Bei der Softwareentwicklung ist eine schnelle Umsetzung ohne lange Einarbeitungszeiten wichtig. Folgende Tools, Platformen und Programmiersprachen sind bei uns im Einsatz und können somit schnell und erfolgreich angewandt werden.
Programmiersprachen
C/C++
Python
Rust
Matlab
Plattformen und Hersteller
Microchip (PIC16, PIC18, PIC24, dsPIC etc.)
ST Microelectronic (STM8, STM32)
ESP32
Raspberry Pi
Cypress Semiconductor (PSOC, Bluetooth/ARM SoCs)
Atmel (diverse)
Nordic Semiconductor (nRF51, nRF52 Bluetooth/ARM SoCs)
Zynq-7000
Andere ARM-Plattformen auf Anfrage sehr gerne möglich
Entwicklungsumgebungen
Eclipse
STM32CubeIDE / STM32CubeMX
ARM-GCC Toolchain
Atollic True Studio for ARM
Microchip MPLAB-X IDE / IPE
Qt GUI Framework
freeRTOS
touch GFX
neovim
make / CMake
CLion
(embedded) Linux
Cypress PSoC Creator
Keil μVision 4/5
Visual Studio Code
PyCharm
CLion
Segger Embedded Studio
Git / GitBash / GitLab / GitAhead
XtratuM Next Generation (XNG) Hypervisor
Einige der umgesetzten Aufgaben aus vergangenen embedded Software Projekten:
Treiberentwicklung für Displays, Sensoren, UI-Elemente und Aktoren
Visualisierung einer Benutzeroberfläche mit Qt / TouchGFX
Einbindung von Kommunikationsprotokollen wie CAN-Bus, CANopen, SPI, I2C, UART, IO-Link
Mikrocontrollerseitige Implementierung für Firmware Updates über Bluetooth Low-Energy (FOTA), CAN-Bus und UART
Softwareentwicklung mit FreeRTOS (Real-time operating system for microcontrollers)
Desktop Applikation zum Senden von Firmware Updates über UART und Bluetooth
Desktop Programm zum Auslesen der auf dem Mikrocontroller geloggten Daten
Programmierung und Inbetriebnahme eines LoRaWAN Gateways
Automatisierung eines Platinentesters
Ethernet-Anbindung durch den Lightweight IP (lwIP) Stack
Implementierung eines Zeitsynchronisierungsprotokolls basierend auf PTP
FOTA-Update für mehrere vernetzte Mikrocontroller über Bluetooth
Firmware Update über CAN-Bus
Zertifizierte Sicherheitssoftware für sicherheitsrelevante Elektronik
Code Check / Analyse zur Fehlersuche bzw. Codeoptimierung
Portierung von Software auf neue Hardware-Plattformen
Rapid Prototyping Software für eilige Prototypen und Erstmuster
Embedded Softwareentwicklung in 7 Steps
Während die grundlegenden Schritte des Softwareentwicklungslebenszyklus (SDLC) ähnlich bleiben, gibt es spezifische Herausforderungen und Überlegungen, die für Embedded Software charakteristisch sind:
1
Anforderungsanalyse
Diese Phase ist wie bei jeder Softwareentwicklung kritisch, aber bei Embedded Software muss besonders auf die Einschränkungen der Hardware, Echtzeitanforderungen und Umgebungsbedingungen geachtet werden. Die Anforderungen müssen sehr präzise definiert werden, um Spezifikationen wie Leistungsbedarf, Speichergröße und Energieverbrauch zu berücksichtigen.
2
Systemdesign
Neben der Softwarearchitektur wird hier auch das Design des gesamten Systems einschließlich der Hardware berücksichtigt. Die Entwickler müssen entscheiden, wie die Software mit der Hardware interagieren wird, was oft die Entwicklung von Treibern und Middleware umfasst.
3
Implementierung
Die Codierung von Embedded Software erfolgt oft in Programmiersprachen wie C, C++ oder Rust, die für die Entwicklung von Low-Level-Operationen geeignet sind. Entwickler müssen Code schreiben, der effizient mit der Hardware arbeitet und dabei die Ressourcenbeschränkungen beachtet.
4
Hardware-Software-Integration
In diesem Schritt wird die entwickelte Software auf der Zielhardware getestet. Dies ist eine kritische Phase, in der die Interaktion zwischen Software und Hardware verifiziert und optimiert wird. Probleme wie Hardwaredefekte, Timing-Probleme und Speicherverletzungen müssen hier identifiziert und behoben werden.
5
Testen
Das Testen von Embedded Software umfasst nicht nur Softwaretests, sondern auch Hardwaretests. Dies kann Unit-Tests, Integrationstests, Systemtests und spezielle Tests für Echtzeitfähigkeit, Leistungsverhalten und Fehlertoleranz beinhalten.
6
Deployment
Die Bereitstellung von Embedded Software kann das Flashen der Software auf das Gerät oder das Durchführen von Firmware-Updates umfassen. In vielen Fällen ist die Software fest in die Hardware integriert, was Änderungen nach der Auslieferung erschwert. Wir unterstützen Sie bei der richtigen Updatestrategie und der Umsetzung. Somit bleiben sie selbst nach der Auslieferung flexibel mit Softwareänderungen.
7
Wartung und Updates
Aufgrund der oft engen Integration mit der Hardware und der langen Lebensdauer vieler eingebetteter Geräte ist die Wartung von Embedded Software besonders wichtig.