Files
sdes_lab/sdes_skipt_mkdocs/docs/6_aufgabe2.md

3.6 KiB
Raw Permalink Blame History

6. Aufgabe 2 - Erstellung von Tasks

6.1. Wissen

6.1.1. Tasks

Ein Task ist für gewöhnlich eine Endlosschleife einer Funktion, die von dem Scheduler der CPU zugeteilt wird. Es können mehrere Tasks gleichzeitig laufen, die dann entsprechend ihrer Priorität CPU-Zeit zugeteilt bekommen. In µC/OS-II wird ein Task mit der Methode

INT8U OSTaskCreate (void (task)(void pd), void pdata, OS_STK ptos, INT8U prio)

erstellt. Der Task benötigt eine Priorität, die gleichzeitig auch seine Identifikation darstellt. Kleinere Zahlen bedeuten eine höhere Priorität. Mit dem Funktionsaufruf von

UCOSStartup (CPU_FNCT_PTR initial_func)

wird unter anderem der Scheduler und somit das Multitasking gestartet. Ein Task be- nötigt seinen eigenen Stack mit der entsprechenden Stack-Größe. Dieser sollte statisch alloziert werden.

Empfohlene Literatur:

  • µC/OS-II Micrium Documentation[mic, µC/OS-II Quick Reference]
  • Micrium: Inter Process Communication via Message Queues [wik, Message Queues QuickStart Guide, S. 9]
  • Technical Reference Manual : Zynq-7000 ZC-706 im Repository Ordner

6.2. Aufgabenstellung

6.2.1. Teil1

Das in der ersten Aufgabe programmierte Programm soll nun als Task ausgeführt werden. Zusätzlich sollen in einem weiteren Task Fibonaccizahlen berechnet und ausgegeben werden.

  • Das Programm weist zahlreiche Fehler auf, die es zu debuggen gilt

Screenshot
Abbildung 6.1.: Menü zum Inspizieren von Betriebssystemfunktionen

Screenshot
Abbildung 6.2.: Fenster zum Inspizieren der Stackausnutzung

  • Eine sinnvolle Hilfe stellt die UCOS-2 Dokumentation zu dem Thema Task Management dar (siehe oben: ”Empfohlene Literatur”)
  • Tipp: Die UART Schnittstelle ist fehlerhaft konfiguriert, die gewünschte Frequenz sollte auf 50000000 eingestellt sein, die erste der beiden UART Instanzen ausgewählt sein. (siehe TRM Zynq 7000)

Dokumentieren Sie die gefundenen Fehler.

Die Lauterbach Umgebung bietet mehrere Möglichkeiten das Multitasking in UCOS zu überwachen (siehe Abbildung 6.1):

  • Überwachung der Tasks und ihrer Prioritäten (Beispiel siehe Abbildung 6.2)
  • Überwachung von Stackgrößen, auch die der Tasks (Beispiel siehe Abbildung 6.3.: Diese Überwachung basiert auf der Überprüfung auf Nullen im Stack.)

Screenshot
Abbildung 6.3.: Fenster zum Inspizieren von laufenden Tasks, ihren Prioritäten und IDs

6.3. Post-Kolloquium

  • Welche Bedeutung hat UCOSStartup()?
    (Tipp: Suchen Sie in Eclipse nach der Funktion (Strg+H) und machen Sie sich mit dem Inhalt vertraut. Ist der Aufruf dieser Funktion für die korrekte Funktion des Programms notwendig?)
  • Wie ist der Task Control Block aufgebaut? (Siehe Quellcode 6.1)
  • Was ist eine Message Queue und warum wird sie genutzt?
  • Welche Vorteile hat eine Message Queue?
  • Über welche Parameter wird die UART Schnittstelle konfiguriert?
  • In Aufgabe 1 haben Sie sich eingehend mit der Toolchain beschäftigt. Schauen sie sich nun einmal die Dateien out/Aufgabe2_ps7_core0.lst und out/Aufgabe2_ps7_core0.map an. Was steht in diesen Dateien und welche Informationen könnten Sie hier heraus ziehen?
typedef struct os_tcb {

    OS_STK  *OSTCBStkPtr;

    void    *OSTCBExtPtr;

    OS_STK  *OSTCBStkBottom;
    INT32U   OSTCBStkSize;

    INT16U   OSTCBOpt;

    INT16U   OSTCBId;

    struct   os_tcb *OSTCBNext;
    struct   os_tcb *OSTCBPrev;

    OS_FLAGS OSTCBFlagsRdy;

    INT8U    OSTCBStat;
    INT8U    OSTCBPrio;

} OS_TCB;

Quellcode 6.1: Ausschnitt aus dem Task Control Blocks in µC/OS-II