90 lines
3.6 KiB
Markdown
90 lines
3.6 KiB
Markdown
# 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](references.md), µC/OS-II Quick Reference]
|
||
- Micrium: Inter Process Communication via Message Queues [[wik](references.md), 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
|
||
|
||
 <br> Abbildung 6.1.: Menü zum Inspizieren von Betriebssystemfunktionen
|
||
|
||
 <br> 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.)
|
||
|
||
 <br> Abbildung 6.3.: Fenster zum Inspizieren von laufenden Tasks, ihren Prioritäten und IDs
|
||
|
||
## 6.3. Post-Kolloquium
|
||
|
||
- Welche Bedeutung hat UCOSStartup()?<br>
|
||
(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
|