Hochschule Augsburg | Fakultät für Informatik | Embedded Systems II

Aufgaben zu FreeRTOS

(von Andreas Tschirner, nachbearbeitet von H. Högl)

Die Beispielprogramme sind in Gitlab unter

https://r-n-d.informatik.hs-augsburg.de:8080/es2/es2-nucl476/cube-demos

1 Allgemeine Fragen

Beantworten Sie die folgenden Fragen zu FreeRTOS:

  1. Allgemein zu FreeRTOS

    • Was sind typische Aufgaben eines Betriebssystems und welche davon werden von FreeRTOS unterstützt, gerne auch in Form einer Tabelle.

    • Reichen die Ressourcen des Stm32l746x aus, um FreeRTOS darauf laufen zu lassen? Denken Sie an Speicher für Programm/Daten und die CPU.

    • Wann eignet sich FreeRTOS in einem Projekt (oder Teilprojekt) und wann nicht? Bzw. was sind Kriterien die gegen bzw. für FreeRTOS in einem Projekt sprechen.

    • Was ist der Unterschied zwischen Prozessen, Threads und Tasks?

  2. Gehen Sie kurz auf die Unterschiede von Linux und FreeRTOS ein (Betriebsart, Scheduler, Schutz, Echtzeit).

  3. Synchronisationsmechanismen

    • Was versteht man unter Multitasking und welche Arten unterstützt FreeRTOS?

    • Wofür werden Semaphore typischerweise verwendet?

    • Was versteht man unter dem Begriff Gatekeeper Task und welches Problem wird damit entschärft?

2 FreeRTOS_ThreadCreation2

  1. Erweitern Sie das Beispiel um einen vierten Thread und lassen Sie innerhalb des Threads die vierte LED jede Sekunde toggeln.

  2. Ändern Sie die Priorität eines Threads z.B. auf osPriorityRealtime. Was hat sich nun geändert? Machen Sie sich das an Hand des Zustandsdiagramms klar (Dafür reichen die beiden Zustände Ready und Running).

3 FreeRTOS_Semaphore3

  1. Erweitern Sie das Beispiel um einen vierten Thread und lassen Sie innerhalb des Threads die vierte LED jede Sekunde toggeln.

  2. Erklären Sie das Verhalten an Hand des Zustandsdiagramms. Welche Aufgabe hat nun der dritte Zustand Blocked und welche Ereignisse sorgen dafür, dass der Thread von Blocked zu Ready wechselt?

4 FreeRTOS_SemaphoreFromISR

  1. Erweitern Sie das Beispiel um einen weiteren Thread (LED1). Bei dem ersten Tastendruck soll nur die LED2 aufleuchten und beim zweiten nur die LED1. Jeder Tastendruck bewirkt also, dass die eine LED aufleuchtet und die andere erlischt.

5 Gatekeeper Task

Studieren Sie zunächst die weiteren Beispiele:

  • FreeRTOS_Mail

  • FreeRTOS_Signal

Erstellen Sie nun ein Projekt mit fünf Threads. Einer stellt den anderen die serielle Schnittstelle (USART2) zur Verfügung. Diese Funktion soll nicht blockieren, sondern den Inhalt, der über die serielle Schnittstelle ausgegeben werden soll, entgegennehmen und entsprechend umkopieren.

Nach einem Tastendruck (User Button) sollen die anderen vier Threads eine Ausgabe (über den vierten Thread) veranlassen.

Hinweise: