Modernes C-Programmierung – Fortgeschrittene Themen: Essentielle C-Features für Embedded-Projekte meistern – vom Linker-Interna bis zu State Machines.
Hands-on mit Arrays, Pointern, objektorientierten Mustern in C und fortgeschrittenen Embedded-Konzepten (AVR-Fokus).
Die Entwicklung der C-Standards nachvollziehen und verstehen, wie neue Konstrukte Embedded-Code beeinflussen.
Praktische Erfahrung sammeln durch umfangreiche Labs (~70%), die reale Codebasen widerspiegeln.
Wie dieser Kurs hilft: Robuste, portable und effiziente Embedded-Software sicher entwickeln.
Für wen: konzipiert für Personen mit C-Erfahrung, die ihre Embedded-Expertise vertiefen möchten.
Am Ende wirst du komplexe Systeme in C souverän implementieren – von ISRs bis zu Low-Power-Design.
Curriculum
Essentielles C
- Aufgaben des Linkers (im Detail)
- Ausführungskontext von Anwendungen
- ABI-Formate
- Fallstricke bei Promotion und Overflow
- Pointers
- Arbeiten mit mehrdimensionalen Arrays
- Fallstricke bei Arrays und C strings
- Komplexe Datentypen
- Inlining – erneut betrachtet
- Portabilitätsprobleme und Lösungen
- Undefined behaviors
Objektorientierte Methoden in C
- Konstruktoren und Destruktoren sowie Toolchain-Unterstützung
- "Virtual methods" in C und ihre Vorteile
- "Inheritance" und "polymorphism"
- Performance-Verbesserungen
State Machines richtig umsetzen
- Zustandsrepräsentation (Enums, Function Pointers)
- Transitionstabellen und Guards
- Hierarchische State Machines (HSM)
- Event-getriebene Architektur für Embedded-Systeme
Entwicklung der Sprache C
- Neuere Sprachkonstrukte (Keywords, Trigraphs, Digraphs)
- C11 _Generic und type-generic Macros
- C11/C18-Updates mit Relevanz für Embedded-Codebasen
Umgang mit variabler Argumentanzahl
- Grundlagen von varargs
- Sicherheitsaspekte (Format-Strings, Grenzen, Undefined Behavior)
Embedded-Programmierung (AVR-Fokus)
- Überblick zur AVR-Architektur (Memory, CPU)
- Wichtige Register und Adressierungsarten
- Zentrale AVR-Instruktionen
- Timers
- I/O ports
- ADC
- PWM
- Interrupt handling
- AVR interrupts und der Interrupt-Vektor
- ISRs schreiben: Do's & Don'ts, Beispiele
- Deferrable functions und deferred work
- Zeitmanagement mit Timern
- Timer-Betriebsmuster
- RTOS-Grundlagen
- Scheduling: Threads, Context Switching, Schedulertypen
- Einen Task Scheduler für präzises Timing implementieren
- Mutexes (Typen, robust vs. non-robust, Policy)
- MMU-Grundlagen
- Hardware-I/O: Busse und Ports
- Register-Recap (GPIO/ADC/PWM/Watchdog)
- Power Management und System-Power-States
Fortgeschrittenes Embedded C (zusätzlich)
- C11 atomics vs. volatile; Memory Order und lock-free Patterns (wo anwendbar)
- Ringpuffer für ISR ⇄ Main-Kommunikation (Single-Producer/Single-Consumer)
- DMA-Grundlagen und Zero-Copy-I/O (wo verfügbar)
- Linker Scripts und Speichersektionen (.text/.data/.bss/.rodata, Custom Placement)
- Startup Code und Boot-Sequenz (Reset Vector, crt0, Initialisierungsreihenfolge)
- Interrupt-Latenz, kritische Abschnitte und Determinismus
- Tickless Scheduling und Timer mit geringem Jitter
- Festkommaarithmetik und Sättigungsarithmetik
- MISRA C-Überblick und praktischer Umgang mit Abweichungen
- Testing auf Embedded-Zielen: Unity/CMock, Fakes und HIL
- Abstraktionsstrategien: HAL vs. Registerzugriff; Compile-Time-Konfiguration
- Low-Power-Design: Schlafmodi, Clock Gating, Wake-up-Quellen
Kursablauf
- Teil 1: 09:00–10:30
- Pause: 10:30–10:45
- Teil 2: 10:45–12:15
- Mittagspause: 12:15–13:15
- Teil 3: 13:15–15:15
- Pause: 15:15–15:30
- Teil 4: 15:30–17:30