briefings // Einfuehrung in die Embedded Entwicklung
Legen wir Server-Client und Apps beiseite und schauen Embedded Systems genauer unter die Haube. Was unterscheidet diese Entwicklungsebene von anderen Vorgehen? Worauf müssen wir besonders achten und wie verändern sich unsere Anforderungen und Vorgehen? Mit bewährten Beispielen gibt es einen Einstieg in funktionale Sicherheit, Echtzeit und Nebenläufigkeit für eingebettete Systeme. Ein kompakter Einstieg in hardwarenahe Entwicklung.
Einfuehrung in Embedded Systeme
Von Maschinencode bis Rust (und mehr)
24.01.2025
Was sind Embedded Systeme?

Was sind Embedded Systeme?
- Systeme, die speziell für bestimmte Aufgaben konzipiert sind
- Automotive (Steuergeräte)
- Medizintechnik (Herzmonitor)
- IoT-Sensoren (Temperaturüberwachung)
- Haushaltsgeräte (Kaffeemaschinen)
- Luftfahrt (Flugsteuerung)
- Arbeiten unter Hardware- und Energieeinschränkungen
Server/Client vs. Embedded
| Feature | Server/Client | Embedded-Systeme |
|---|---|---|
| Hardware-Ressourcen | Nahezu unbegrenzt | Stark limitiert |
| Echtzeitanforderungen | Gering bis keine | Häufig kritisch |
| Stromversorgung | Immer verfügbar | Batteriebetrieben |
| Update-Flexibilität | Regelmäßig/Automatisch | Selten/Schwierig |
Hardware-beschraenkungen
- Wenig Speicher: KB statt GB
- Limitierte CPU-Leistung: MHz statt GHz
- Meist Single-Core-System
- Keine GPU Rechenleistung
- Energieverbrauch: Batteriebetrieben, Energieeffizient
- Beispiel: ESP32 (160 MHz, 400 KB RAM, 4 MB Flash)
- Gegenbeispiel: Heimrechner (8 x 3,60Ghz, 128GB Ram, 12TB Speicher, RTX4070 GPU)
Harte Echtzeit
- Definition: Garantierte Antwortzeit in Millisekunden
- Beispiele:
- Airbags (≤ 10 ms)
- Motorsteuerung (≤ 1 ms)
- Herausforderungen:
- (Predictable) Scheduling
- Kein Platz für „Garbage Collection“
- Random Number Generators sehr rechenintensiv
Funktionale Sicherheit
- Ziel: Vermeidung von Risiken durch Systemfehler
- Beispiele:
- ISO 26262 (Automotive)
- IEC 61508 (Industrie)
- Praktische Auswirkungen:
- Redundante Hardware
- Verifikation und Validierung
- Testanforderungen (Four Eye)
Zuverlaessigkeit und Lebenszyklus
- Anforderungen:
- Langzeitstabilität: 10+ Jahre Betrieb
- Robust gegen äußere Einflüsse (Temperatur, Feuchtigkeit, mechanischer Natur)
- Geringe Wartung: Firmware-Updates oft schwierig
- Beispiel: Steuergeräte in Fahrzeugen
Vielfalt der
Embedded Welt
- Automotive: Harte Echtzeit, Sicherheit
- Medizintechnik: Verlässlichkeit, Validierung, Präzision
- Luftfahrt: Redundanz, Zertifizierung
- Kaffeemaschinen: Kosteneffizienz, Benutzerfreundlichkeit
- IoT-Sensoren: Energieeffizienz, Netzwerkkonnektivität

Software
-
Sprachen
Maschinencode und Assembler
- Maschinencode: Direktes Arbeiten mit Binärdaten (z.B. 10101010)
- Assembler: Menschlich lesbare Abstraktion
- Beispiel Assembler
MOV AL, EAX
ADD AL, 200
OUT 0x64, AL
Assembler

Von Assembler zu C
- Einführung von Abstraktion
- Besser lesbar: “
int a = 5;“ - Portabilität zwischen Architekturen
void setLED() {
GPIO- > OUT = 0x01;
}
Keine Systemfehler zur Compiletime!
C Upgrade ++
- Klassen und Objekte: Wiederverwendbarkeit
- Abstraktion: LED als Objekt
class LED {
public:
void on() { GPIO->OUT = 0x01; }
};
Keine Systemfehler zur Compiletime!

Zukunft Rust
- Ownership-Modell verhindert Speicherfehler
- Kein Nullpointer-Dereferenzieren
- Effizienz: Low-Level wie C, aber sicherer
- Hardware Abstraktion durch HAL
let p = embassy_stm32::init(Default::default()); // Peripherie
let mut led = Output::new(p.PC13, Level::High, Speed::Low);
loop {
led.set_high();
Timer::after_millis(1000).await;
led.set_low();
Timer::after_secs(1).await;
}


Quick Recap
| Maschinen code | Assembler | C/C++ | Rust | |
|---|---|---|---|---|
| Lesbar | - - | - | + | ++ |
| Wartbar | - - | - | + | ++ |
| Modular | - - | - | ++ | ++ |
| HAL | - - | - | + | ++ |
| Komplex | - | 0 | + | ++ |
| Nullpointer | - | - | - | + |
| Geschwindigkeit | ++ | + | 0 | 0 |
Hardware
MCU
Arduino

Arduino
- Schnellstart für Maker und Profis
- Einfach zu programmieren mit Arduino IDE
- Riesige Community und Bibliotheken
- Anwendungsfälle: Prototyping, Bildungsprojekte
Beispiel in Arduino IDE (C ähnlich)
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
STM32

STM32

STM32

STM32
- Der Klassiker für Embedded-Entwicklung
- ARM Cortex-M, 72 MHz, 64 KB RAM, bis 512 KB Flash
- Viele Varianten (Low-Power, High-Performance)
- Besonderheit: Umfangreiche Peripherie (CAN, I2C, SPI, ADC)
- Anwendungsfälle: Industrie, Automotive, Medizintechnik
ESP32

ESP32
- WLAN und Bluetooth in einem Modul
- ARM Cortex-M/32-Bit RISC-V (2021), 160 MHz, 400 KB SRAM, 4 MB Flash
- WLAN 802.11 b/g/n, Bluetooth 5.0
- Anwendungsfälle: IoT-Geräte, Smart Home
- Besonderheit: Preisgünstig und vielseitig
Beispielcode (Rust)
let wifi = Wifi::new();
wifi.connect(“SSID”, “password”);
Embedded
Architektur

Softwarearchitektur in Embedded-Systemen
- meist Layered Architecture
- Hardware-Abstraktionsschicht (HAL)
- Betriebssystem oder Scheduler
- Applikationslogik
- Vorteile
- Geringe Größe
- Modularität
- Wiederverwendbarkeit
- Einfachere Fehleranalyse
- Beispiel: RTOS-basierte Architektur
- Tasks für Sensoren, Kommunikation und Steuerung
- Energiesparzyklen/-Modi

Systemarchitektur
- Co-Design von Hardware und Software
- Ressourcenbeschränkungen früh berücksichtigen
- Interface-Definition zwischen Modulen festlegen
- Beispiel
- Kommunikation über SPI/I2C zwischen Microcontroller und Sensor
- Kommunikation zwischen Microcontroller über UART
- Echtzeitsteuerung von Aktoren über PWM
Systemarchitektur Herausforderung
- Synchronisation zwischen Software- und Hardwareentwicklung
- Starke Einflüsse von außen (Wetter, Zugänglichkeit, Versorgung)
- Änderungen der Sensoren/Aktoren haben starke Auswirkung auf Software
- Wechselnde Anforderungen des Kunden

Beispiel: IoT-Geraet
- Anforderungen
- Periodisches Auslesen eines Sensors
- Senden der Daten über WLAN
- Hardware: ESP32 + DHT22 (Temperatursensor)
- Software
- FreeRTOS für Multitasking
- MQTT für Datenübertragung
- Beispiel (Rust)
let mut sensor = Dht22::new(pin);
let temperature = sensor.read_temperature()?;
mqtt.publish(“sensor/temp”, temperature);

Zusammenfassung
- Embedded-Systeme sind vielseitig und anspruchsvoll
- Rust ist ein vielversprechendes Tool
- Sicherheit
- Effizienz
- Modernes Ökosystem
- Plattformen wie ESP32, STM32 und Arduino ermöglichen schnelle Prototypenentwicklung
- Architektur und Anforderungsanalyse sind entscheidend für den Erfolg

END OF BRIEFING
MAIL:
robert.jeutter@wieerwill.dev
MASTODON:
https://chaos.social/@wieerwill
LINKEDIN:
https://www.linkedin.com/in/wieerwill