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, SicherheitMedizintechnik : Verlässlichkeit, Validierung, PräzisionLuftfahrt : Redundanz, ZertifizierungKaffeemaschinen : Kosteneffizienz, BenutzerfreundlichkeitIoT-Sensoren : Energieeffizienz, Netzwerkkonnektivität
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
Sehr fehleranfällig und schwer wartbar Von Prozessorarchitektur abhängig
Assembler
Von Assembler zu C Einführung von Abstraktion Besser lesbar: “int a = 5;“ Portabilität zwischen Architekturen void setLED() {
GPIO- > OUT = 0x01;
}
+ Modularisierung durch Funktionen & Methoden+ Schnellere Entwicklung+ Leichtere Fehlersuche- ABER: Keine Memory Safety! Keine Systemfehler zur Compiletime!
C Upgrade ++ + Klassen und Objekte: Wiederverwendbarkeit+ Abstraktion: LED als Objektclass LED {
public:
void on() { GPIO->OUT = 0x01; }
};
- Größere Codebasis- Schwer zu debuggen in Embedded-Umgebungen- ABER: Keine Memory Safety! Keine Systemfehler zur Compiletime!
Zukunft Rust + Ownership-Modell verhindert Speicherfehler+ Kein Nullpointer-Dereferenzieren+ Effizienz: Low-Level wie C, aber sicherer+ Hardware Abstraktion durch HALlet 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;
}
Moderne Toolchain: Rustup, Cargo, probe-rs + Nicht nur für Embedded geeignet
Quick Recap Maschinen code Assembler C/C++ Rust Lesbar - - - + ++ Wartbar - - - + ++ Modular - - - ++ ++ HAL - - - + ++ Komplex - 0 + ++ Nullpointer - - - + Geschwindigkeit ++ + 0 0
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”);
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
Zeit für eure Fragen & Diskussionen WieErWill.dev/vcard.vcf