Zum Inhalt springen
Fortgeschritten 12 Std. · 8 Module · 47 Lektionen

Embedded C & FreeRTOS in der Praxis

Vom blinkenden LED-Tutorial zur wartbaren Firmware: Embedded C sauber schreiben, FreeRTOS richtig einsetzen, Treiber und Architektur wie in der Industrie.

Das kannst du nach dem Kurs

  • Du strukturierst Firmware in Hardware-, Middleware- und Applikationsschicht und kannst sie auf einen anderen Mikrocontroller portieren.
  • Du designst FreeRTOS-Tasks mit passenden Prioritäten und Stack-Größen – und kannst beides messen statt raten.
  • Du nutzt Queues, Mutexe, Semaphores, Event Groups und Task-Notifications dort, wo sie hingehören.
  • Du schreibst Interrupt-Handler, die mit FreeRTOS sauber zusammenspielen (FromISR-API, Deferred Interrupt Handling).
  • Du implementierst eigene Treiber für I2C-, SPI- und UART-Peripherie anhand des Datenblatts.
  • Du findest Stack-Overflows, Prioritätsinversion und Race Conditions systematisch mit Trace und Debugger.

Worum es in diesem Kurs geht

Die meisten Embedded-Kurse enden dort, wo die Probleme anfangen: nach dem ersten Task und der ersten Queue. Dieser Kurs beginnt genau dort. Du baust über acht Module einen Sensor-Datenlogger – mit I2C-Temperatursensor, SPI-Flash, UART-Kommandozeile und einem Bootloader, der Firmware von der SD-Karte lädt.

Jedes Modul folgt demselben Muster: ein konkretes Problem, die Theorie dahinter, die Umsetzung im Projekt – und die Fehler, die dabei typischerweise passieren.

Was diesen Kurs von Tutorials unterscheidet

  • Architektur statt Einzelbeispiele. Ab Modul 3 arbeitest du in einer 3-Schichten-Struktur (Hardware, Middleware, Applikation), die ich in der Industrie für Schaltnetzteile und IoT-Geräte verwende.
  • Messen statt raten. Stack-Größen, Task-Laufzeiten und Interrupt-Latenzen werden gemessen – mit Watermarks, Trace und Logic Analyzer.
  • Fehler als Lehrmaterial. Prioritätsinversion, Deadlocks, vergessene volatile-Qualifier, Mutex in der ISR: Du erzeugst die Fehler absichtlich, siehst die Symptome und lernst die Diagnose.
  • Testbar auf dem PC. Die Applikationsschicht läuft mit Mocks auch ohne Hardware – Unit-Tests gehören ab Modul 7 zum Workflow.

Beispiel aus Modul 6: Deferred Interrupt Handling

/* ISR: nur das Nötigste, keine Blocking-Aufrufe */
void USART2_IRQHandler(void)
{
    BaseType_t woken = pdFALSE;
    uint8_t byte = (uint8_t)USART2->RDR;

    ringbuf_put(&rx_buf, byte);
    vTaskNotifyGiveFromISR(uart_task_handle, &woken);
    portYIELD_FROM_ISR(woken);
}

/* Task: verarbeitet die Daten außerhalb des Interrupt-Kontexts */
static void uart_task(void *arg)
{
    for (;;) {
        ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
        cli_process(&rx_buf);   /* darf blockieren, loggen, Queues nutzen */
    }
}

Warum nicht einfach alles in der ISR erledigen? Weil jede Mikrosekunde in der ISR die Latenz aller anderen Interrupts erhöht – und weil FreeRTOS-Funktionen ohne FromISR-Suffix dort schlicht verboten sind. Im Kurs misst du den Unterschied selbst.

Für wen der Kurs ist

  • Studierende der Informatik oder Elektrotechnik, die über das Praktikum hinaus echte Firmware schreiben wollen
  • Software-Entwickler (Web, Backend, Desktop), die in Embedded wechseln und RTOS-Erfahrung brauchen
  • Embedded-Einsteiger, die Tutorials nachgebaut haben und jetzt verstehen wollen, warum ihr Code manchmal hängt
  • Hardware-Entwickler, die ihre eigenen Boards mit sauberer Firmware zum Leben erwecken wollen

Für wen der Kurs nicht ist

  • Absolute Programmier-Anfänger ohne C-Grundlagen (Pointer, Structs, Funktionen) – starte dann mit dem kostenlosen Udemy-Kurs
  • Entwickler, die eine Hochsprachen-Abstraktion (Arduino-Bibliotheken, MicroPython) suchen und keine Register sehen wollen
  • Teams, die Embedded Linux / Yocto lernen möchten – das ist ein anderer Kurs

Curriculum

Module und Lektionen im Überblick. Du kannst in deinem Tempo lernen und jederzeit springen.

  1. Modul 01 Setup & Toolchain 5 Lektionen
    1. 1.1 Kursüberblick und Lernpfad
    2. 1.2 Hardware-Empfehlung: Cortex-M-Boards im Vergleich
    3. 1.3 Toolchain: GCC, CMake, OpenOCD und GDB einrichten
    4. 1.4 Erstes Projekt: Build, Flash, Debug-Session
    5. 1.5 Git-Workflow für Firmware-Projekte
  2. Modul 02 Embedded C, das nicht überrascht 6 Lektionen
    1. 2.1 Speicherlayout: .text, .data, .bss, Stack und Heap
    2. 2.2 volatile, const und Register-Zugriff über Structs
    3. 2.3 Bitmanipulation ohne Fehler: Masken, Shifts, Makros
    4. 2.4 Linker-Script lesen und Map-File auswerten
    5. 2.5 Startup-Code und Reset-Handler verstehen
    6. 2.6 Compiler-Warnungen als Werkzeug: -Wall, -Wextra, -Werror
  3. Modul 03 Peripherie und Treiber 6 Lektionen
    1. 3.1 GPIO: Konfiguration und Entprellen
    2. 3.2 UART: Polling, Interrupt, DMA – und wann was
    3. 3.3 I2C: Protokoll, Datenblatt lesen, Temperatursensor-Treiber
    4. 3.4 SPI: Modi, Chip-Select, Flash-Speicher ansprechen
    5. 3.5 Treiber-API-Design: Rückgabewerte, Timeouts, Fehlercodes
    6. 3.6 Hardware-Abstraktionsschicht (HAL) selbst strukturieren
  4. Modul 04 FreeRTOS-Grundlagen 6 Lektionen
    1. 4.1 Scheduler, Tick und Kontextwechsel auf Cortex-M
    2. 4.2 Tasks anlegen: Prioritäten, Stack-Größen, Task-Parameter
    3. 4.3 FreeRTOSConfig.h: die Optionen, die wirklich zählen
    4. 4.4 Blocking vs. Busy-Waiting: vTaskDelay und vTaskDelayUntil
    5. 4.5 Idle-Task, Hooks und Tickless Idle
    6. 4.6 Stack-Overflow-Detection und Stack-Watermark messen
  5. Modul 05 Synchronisation und Kommunikation 6 Lektionen
    1. 5.1 Queues: Producer/Consumer sauber umsetzen
    2. 5.2 Binary- und Counting-Semaphores
    3. 5.3 Mutex und Prioritätsvererbung – Prioritätsinversion live
    4. 5.4 Event Groups und Stream Buffers
    5. 5.5 Task-Notifications: der schnellste Weg
    6. 5.6 Entscheidungsmatrix: welches Primitiv wann
  6. Modul 06 Interrupts und Timing 6 Lektionen
    1. 6.1 ISR-Regeln: was in Interrupts erlaubt ist
    2. 6.2 FromISR-API und portYIELD_FROM_ISR
    3. 6.3 Deferred Interrupt Handling mit Task-Notifications
    4. 6.4 Interrupt-Prioritäten und configMAX_SYSCALL_INTERRUPT_PRIORITY
    5. 6.5 Software-Timer: Einsatz und Grenzen
    6. 6.6 Zeitstempel: RTC und monotone Zeit
  7. Modul 07 Architektur und Testbarkeit 6 Lektionen
    1. 7.1 Layered Architecture: Hardware, Middleware, Applikation
    2. 7.2 Module schneiden: Schnittstellen, Abhängigkeiten, Header
    3. 7.3 Hardware weg-abstrahieren: Mocks für Unit-Tests auf dem PC
    4. 7.4 Unit-Tests mit Unity/CMock und Ceedling
    5. 7.5 Logging und Diagnose ohne printf-Chaos
    6. 7.6 Code-Review-Checkliste für Firmware
  8. Modul 08 Debugging und Abschlussprojekt 6 Lektionen
    1. 8.1 HardFault-Analyse: Register lesen, Ursache finden
    2. 8.2 Trace mit SEGGER SystemView / Percepio
    3. 8.3 Race Conditions reproduzieren und beheben
    4. 8.4 Bootloader-Grundlagen und Firmware-Update per SD-Karte
    5. 8.5 Abschlussprojekt: Sensor-Datenlogger mit UART-Kommandozeile
    6. 8.6 Projekt-Review: typische Fehler und nächste Schritte

Voraussetzungen

  • C-Grundlagen: Variablen, Pointer, Structs, Funktionen, Header-Dateien
  • Ein ARM-Cortex-M-Entwicklungsboard (Empfehlung und Alternativen in Lektion 1.2) und ein USB-Kabel
  • Ein PC mit Windows, macOS oder Linux – die Toolchain ist kostenlos (GCC, CMake, OpenOCD/GDB)
  • Etwa 3 Stunden pro Woche für Videos und Übungen über 4–6 Wochen

Fragen zu diesem Kurs

Welches Board brauche ich genau?

Jedes ARM-Cortex-M-Board mit integriertem Debugger funktioniert. Im Kurs verwende ich ein STM32-Nucleo-Board; in Lektion 1.2 zeige ich günstige Alternativen und was du bei anderen Herstellern anpassen musst.

Wird eine bestimmte IDE vorausgesetzt?

Nein. Der Kurs nutzt eine herstellerneutrale Toolchain (GCC, CMake, OpenOCD, GDB) mit VS Code. Du kannst aber auch STM32CubeIDE oder eine andere IDE verwenden – der Code bleibt derselbe.

Wie lange habe ich Zugriff auf den Kurs?

Dauerhaft, solange die Kursplattform besteht. Updates sind inklusive.

Gibt es ein Zertifikat?

Die Kursplattform stellt nach Abschluss eine Teilnahmebestätigung aus. Wichtiger für Bewerbungen ist das Abschlussprojekt in deinem eigenen Git-Repository – genau dafür ist es gebaut.

Was ist, wenn ich nicht weiterkomme?

Unter jeder Lektion gibt es einen Fragen-Bereich, den ich regelmäßig beantworte. Für dein eigenes Projekt kannst du zusätzlich ein 1:1-Code-Review buchen.

Passende Artikel aus dem Blog

Kostenlos lesen, bevor du dich entscheidest – diese Themen werden im Kurs vertieft.

Erst reinschnuppern?

Der kostenlose Einstiegskurs auf Udemy zeigt dir in kompakter Form, wie ich erkläre. Wenn dir der Stil gefällt, ist dieser Kurs der nächste Schritt.

Embedded C & FreeRTOS in der Praxis

149 €

Jetzt kaufen