Von nacktem C-Code zu einem Open-Source-Echtzeitbetriebssystem in Industriequalität.
Ziele des Kurses
Ein „Know-how-Upgrade“ für Programmierer, die bisher auf der Bare-Metal-Ebene mit Mikrocontrollern gearbeitet haben, hin zu einem industrietauglichen Open-Source-Echtzeitbetriebssystem.
- Was sind die Vorteile?
- Was ist der Kompromiss?
Praktische Übungen vermitteln Ihnen die nötige Praxiserfahrung, um nach erfolgreichem Abschluss dieser Schulung ein Echtzeit-Betriebssystem auf Ihrem eigenen eingebetteten System einzusetzen.
Beschreibung
Dieser 3-tägige Kurs veranschaulicht die Konzepte eines Echtzeitbetriebssystems. FreeRTOS wird als Beispiel verwendet. Der Kurs ist so konzipiert, dass Sie schnell auf den neuesten Stand gebracht werden. Die Konzepte und Befehle, die für eine effektive Nutzung von FreeRTOS notwendig sind, werden durch eine Kombination aus Theorie und praktischen Beispielen beschrieben. Erfinden Sie das Rad nicht neu, sondern lernen Sie von einem erfahrenen Trainer und nehmen Sie ein funktionierendes Wissen über FreeRTOS und die Fähigkeit, es in Ihrem eigenen Embedded-Entwicklungsprojekt effektiv einzusetzen, mit nach Hause.
Voraussetzungen
- je nach Host
- Grundlegende Kenntnisse im Umgang mit einem GNU/Linux-System als Endnutzer
- (Der Kursleiter wird Ubuntu als Host-System verwenden.)
- Grundkenntnisse in der Programmierung mit C
Kurs-Fahrplan

Wer sollte teilnehmen?
Personen, die sich für die Entwicklung ressourcenbeschränkter Echtzeitsysteme interessieren oder damit betraut sind, wie Softwareentwickler, Außendiensttechniker, (Projekt-)Manager…
Gliederung des Kurses
Tag 1
Einführung
- Einführung
|Lizenzvergabe|FreeRTOS-Lizenzierung|Echtzeit-Intro (Zeit/UtilityFunktionen|Was ist Echtzeit?|Determinismus|Was ist harte Echtzeit?)|RTOS vs. Linux|IDE/Board
Aufgabenverwaltung
- Einführung (Was ist ein
task?|TaskErstellung)Example01: grobe SchleifeExample02:taskParameterExample03:taskPrioritäten (starvation)Example04:vTaskDelay()(idle task)Example05:vTaskDelayUntil()Example06: „kontinuierliche Verarbeitung“ undvTaskDelayUntil()Example07:idle hookExample08: mit Prioritäten spielenExample09:tasklöschen
Scheduling(Was ist ein Betriebssystem?|Was ist eintask?|Was ist einscheduler?)Schedulers(Schleife|cyclic executives|Einschränkungen voncyclic executives|manualpreemption|mit Unterbrechungen|nicht/präemptiv|priorisiert, präemptiv|rate monotonic|deadline|cooperative|hybrid)
Verwaltung von Warteschlangen
- Einführung (Was ist eine Warteschlange?
|Warteschlange als Datentyp)|Queue Management (Datenspeicherung)|Zugriff durch mehreretasks|Blockierung beim Lesen/Schreiben|InterTaskKommunikation|Beispiel Queue Access)Example10: Warteschlange für Senden/Empfangen (Client-Server-Modell)Example11: Warteschlangen/idle task
- Arbeiten mit großen Daten
|Generische Nachrichtenübermittlung (Indirekt/Direkt Synchron/Asynchron)
Tag 2
Interrupt Verwaltung
- Intro (
Interruptvs.Polling|Wie kann einInterruptarbeiten?|Hardware/SoftwareInterrupts|Was wäre, wenn zweiinterruptszur gleichen Zeit ankommen?|Programmabschnitte|Was ist ablaufinvarianter Code?|Was ist einevent?|Welche Art von "Ereignissen" kennen Sie?) - Einführung in die Gleichzeitigkeit
- Semaphoren Intro (Gegenseitiger Ausschluss)
|Synchronisierung)|Mutex vs. Synchronisation|Semaphore-Typen (Signal/WaitMuster|Binäres Semaphor|FreeRTOS Binäre Semaphore|Zählendes Semaphor)
- Semaphoren Intro (Gegenseitiger Ausschluss)
EventsIntro|InterruptHandler|InterruptBearbeitung (aufgeschoben)|Synchronisieren einerTaskmit einer "Unterbrechung"Example12: verzögerte ISR + Binärsemaphor (Binärsemaphor-API)Example13: verzögerte ISR + Zählsemaphor (Binärsemaphor vs. Zählsemaphor – Ereignisse werden zwischengespeichert)|Zählende Semaphore API)Example14: Aufgeschobene ISR + Warteschlangen (Warteschlangen und ISRs – API,|Ineffiziente Nutzung der Warteschlange,|Effizientere Nutzung der Warteschlange)
Interrupt nesting(NVIC Kortex M3|LPX17xx NVIC|CMSIS|FreeRTOS undinterrupt nesting|Prioritäten)
Ressourcenmanagement
- Intro (Gleichzeitigkeit
|kritische Regionen/Abschnitte|atomar|race condition|Thread safety|die einzelne Variable|Verriegelung|Arten/Ursachen der Gleichzeitigkeit|Was muss geschützt werden und was nicht?|Deadlock|Reihenfolge derLocks|Contention) - Ressourcenverwaltung (Möglicher Konflikt – gleichzeitiger Zugriff auf Objekte)
|Lesen/Ändern/Schreiben|nicht-atomarer Zugriff|reentrancy|Schutz gemeinsamer Ressourcen) - Schutz kritischer Bereiche/Abschnitte (Deaktivieren/Aktivieren von Interrupts)
|Aussetzung/Sperrung des Schedulers|Mutex)Example15: Mutex (Mutex-API)
- Prioritätsumkehrung (Unbegrenzt/
Bounded|Quellen für unbegrenzte Prioritätsumkehrung|Lösungen?|Prioritätsumkehrung und FreeRTOS)|Deadlock (Bedingungen für Deadlock|Prävention)|Gate-keeperTasksExample16:Gate-keeper(vApplicationIdleHook()vs. Priorität 0)
- Mutex vs. Semaphore (Ownership/Recursive Mutex)
|Geschichte
Speicherverwaltung
- Speicherarten
|Fragmentierung|Memory exhaustion|Speicherzuweisungsmuster (fest/statisch)|Variabel/Dynamisch|Stapelzuweisung, Scratch-Pad|Speicherpool)|FreeRTOS Statische Zuweisung|Dynamische Speicherzuweisung in FreeRTOS: FreeRTOS-Heap|(Warum nichtmalloc()/free()|Portierung der Speicherverwaltungheap_1/3/3/4/5.c)|xPortGetFreeHeapSize()
Tag 3
Störungsbeseitigung
- Intro (Was ist ein Fehler/Debugging
|Arten vonbugs|Fehlerbehebungsstrategie)|Fehlervermeidung (Coding Wars)|Produktive Arbeitsumgebung|Build Environment|Wiederverwendung)|Spelunking (find(1),grep(1),cscope(1),global(1), ...)|Modellierung/Abstraktion|Prototypen|Schulung|Anforderungen/Architektur/Entwurf (Design for Test)|Firmware Standard|Code Review)|Fehlersuche (GNU-Toolchain) - Fehlersuche durch Anhalten (Simulator
|JTAG-Fehlersuche|RTOS-fähiger Debugger)Example17:Queue Table
- Fehlersuche im laufenden System (Hardware-Ausnahmen)
|Stack)Example18:vApplicationStackOverflowHook()/uxTaskGetStackHighWaterMark()Example19: FreeRTOS-HeapMallocFailedHook()Example20: FreeRTOStaskStatistikExample21: FreeRTOS-Laufzeitstatistiken
- Profilierung (
gprof | gcov)|Andere Methoden (Hardware-Trace|Softwaregesteuerte LEDs|Oszilloskop|Logik-Analysator|7-Segment-Anzeige|Zeichenbasiertes LCD|Grafisches Display)|FreeRTOSTrace hook macrosExample22: FreeRTOS-Trace-Hook-Makros 1Example23: FreeRTOS-Trace-Hook-Makros 2
- FreeRTOS: Häufige Fehlerquellen
FreeRTOS-MPU
- Einführung (Speicherverwaltung)
|Prozessor-Modi)|FreeRTOS MPU (LPC17xx MPU|Zugriffsberechtigungen|FreeRTOS-MPU-API|vom privilegierten zum Benutzermodus|Linker-Konfiguration|Praktische Tipps für die Verwendung|untertaskKommunikation)Example24: FreeRTOS MPU (Wo ist der Absturz aufgetreten?)
Ampelsteuerung
- Ampelsteuerung – Wende das bisher Gelernte an
Example40: Ampelsteuerung (kompilieren und ausführen)|Heartbeat-Task,|FSM-Aufgabe,|Benutzereingabe-Wert,|Fußgänger)
Kursbroschüre (pdf)
- "FreeRTOS in Theorie und Praxis (3 Tage)"
Verwandte Kurse
- "Embedded Linux - Von der Systemarchitektur bis zur Echtzeit (5 Tage)"
- "Auffrischung zu Embedded Linux & Einführung in das Yocto Projekt (5 Tage)"
- "Embedded Linux Kernel Interna und Gerätetreiber (5 Tage)"
- "Das Yocto-Projekt - Ein gründlicher Überblick (4 Tage)"
- "Einführung in Embedded Linux & Real-Time, Vogelperspektive des Yocto-Projekts (4 Tage)"
- "Einführung in Embedded Linux in Theorie und Praxis - ein Crashkurs (3 Tage)"
- "(Embedded) Linux-Fehlerbehebung (3 Tage)"