Labor03
|
In dieser Header befinden sich alle Deklarationen, die für das HeiOS benötigt werden. More...
Go to the source code of this file.
Data Structures | |
struct | Thread_struct |
struct | ThreadIDLE |
Macros | |
#define | Enter_Critical_Section() __set_BASEPRI(DISABLE_INTERRUPT_NUMBER << (8 - __NVIC_PRIO_BITS)); |
deaktiviert alle Interrupts, die den kritischen Bereich gefährden könnten More... | |
#define | Exit_Critical_Section() __set_BASEPRI(0U); |
aktiviert alle Interrupts, die mit der Funktion Enter_Critical_Section() deaktiviert wurden More... | |
#define | thread_yield() SCB->ICSR=SCB_ICSR_PENDSVSET_Msk; |
triggert den PendSV-Handler an und löst somit einen Kontextwechsel aus More... | |
Typedefs | |
typedef struct Thread_struct | Thread_t |
Deklaration der Thread-Datenstruktur (TCB) More... | |
typedef struct ThreadIDLE | Thread_IDLE_t |
Deklaration der Idle-Thread-Datenstruktur. More... | |
typedef uint8_t(* | svc_call_t) (Thread_t **root, Thread_t *Thread) |
Functions | |
void | setfpoutoutidle (void(*fp)(void)) |
void | Thread_init (Thread_t *Thread, void *stack, uint32_t stack_size, char name[], void(*pfunc)(), uint32_t executiontime, uint8_t priority) |
Diese Funktion initialisert einen Thread und fügt ihn der Ready-Liste hinzu. More... | |
uint16_t | thread_stack_usage (Thread_t *Thread) |
Diese Funktion prüft den Stackbereich. More... | |
uint8_t | priv_thread_sort_add (Thread_t **root, Thread_t *Thread) |
Mithilfe der Funktion werden die Thread-Objekte in einer einfach verketteten Liste angeordnet. Die Reihenfolge ist dabei von der Priorität des Threads abhängig. More... | |
uint8_t | priv_thread_remove (Thread_t **root, Thread_t *Thread) |
Diese Funktion entfernt das Threadobjekt aus der Liste. More... | |
void | thread_suspend (Thread_t *Thread) |
Diese Funktion entfernt einen Thread von der Ready-Liste und löst gegebenenfalls einen Kontextwechsel aus. More... | |
void | thread_resume (Thread_t *Thread) |
Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu. More... | |
void | thread_delay (uint32_t tick) |
Diese Funktion entfernt den übergebenen Thread von der Ready-Liste und fügt ihn der Sleep-Liste hinzu. Nach Ablauf der übergebenen Tickanzahl wird der Thread automatisch der Ready-Liste wieder hinzugefügt. More... | |
void | SVC_Handler_service (uint32_t *svc_args) |
Diese Funktion dient als API, um Funktionen im priviligierten Modus ausführen zu können. Diese Funktion besitzt die höchste Priorität und kann somit von keinem anderen Interrupt unterbrochen werden. More... | |
void | __svc (0x00) svc_thread_yield(void) |
uint8_t | __svc (0x01) svc_thread(svc_call_t |
void | OS_Start_Scheduler (void) |
Diese Funktion initialisiert das OS und sorgt anschließend für den Wechsel in den Idlethread. More... | |
void | save_R4toR11 (void) |
Diese Funktion sichert die Register R4-R8 mit Inline-Assembler. More... | |
void | load_R4toR11 (void) |
Diese Funktion ladet die Register R4-R8 mit Inline-Assembler. More... | |
void | update_Thread_slp (void) |
Diese Funktion aktualisiert die Verzögerungszeit der Threads. More... | |
void | update_executiontime (void) |
Diese Funktion aktualisiert die Ausführungszeit der Threads. More... | |
void | IdleThread (void) |
Diese Funktion durchläuft eine Endlosschleife und sorgt für einen definierten Zustand, falls kein Thread für die Abarbeitung bereit ist. More... | |
__STATIC_INLINE uint32_t | SysTick_RTOS_Config (uint32_t ticks) |
Variables | |
uint8_t Thread_t ** | root |
uint8_t Thread_t Thread_t * | Thread |
In dieser Header befinden sich alle Deklarationen, die für das HeiOS benötigt werden.
#define Enter_Critical_Section | ( | ) | __set_BASEPRI(DISABLE_INTERRUPT_NUMBER << (8 - __NVIC_PRIO_BITS)); |
deaktiviert alle Interrupts, die den kritischen Bereich gefährden könnten
#define Exit_Critical_Section | ( | ) | __set_BASEPRI(0U); |
aktiviert alle Interrupts, die mit der Funktion Enter_Critical_Section() deaktiviert wurden
#define thread_yield | ( | ) | SCB->ICSR=SCB_ICSR_PENDSVSET_Msk; |
triggert den PendSV-Handler an und löst somit einen Kontextwechsel aus
typedef struct ThreadIDLE Thread_IDLE_t |
Deklaration der Idle-Thread-Datenstruktur.
typedef struct Thread_struct Thread_t |
Deklaration der Thread-Datenstruktur (TCB)
void __svc | ( | 0x00 | ) |
uint8_t __svc | ( | 0x01 | ) |
void IdleThread | ( | void | ) |
Diese Funktion durchläuft eine Endlosschleife und sorgt für einen definierten Zustand,
falls kein Thread für die Abarbeitung bereit ist.
keine | Übergabeparameter |
void load_R4toR11 | ( | void | ) |
Diese Funktion ladet die Register R4-R8 mit Inline-Assembler.
keine | Übergabeparameter |
void OS_Start_Scheduler | ( | void | ) |
Diese Funktion initialisiert das OS und sorgt anschließend für den Wechsel in den Idlethread.
Der Prozessstackpointer des Idlethreads wird initialisert und die Prioritäten der Interrupts werden gesetzt.
Ebenfalls wird die Tickrate des SysTick-Handlers konfiguriert und der Wechsel in den Thread-Mode eingeleitet.
keine | Übergabeparameter |
Diese Funktion entfernt das Threadobjekt aus der Liste.
Listenanker | und Threadobjekt |
Mithilfe der Funktion werden die Thread-Objekte in einer einfach verketteten Liste angeordnet.
Die Reihenfolge ist dabei von der Priorität des Threads abhängig.
Ein | Listenanker sowie das Thread-Objekt werden übergeben. |
void save_R4toR11 | ( | void | ) |
Diese Funktion sichert die Register R4-R8 mit Inline-Assembler.
keine | Übergabeparameter |
void setfpoutoutidle | ( | void(*)(void) | fp | ) |
void SVC_Handler_service | ( | uint32_t * | svc_args | ) |
Diese Funktion dient als API, um Funktionen im priviligierten Modus ausführen zu können.
Diese Funktion besitzt die höchste Priorität und kann somit von keinem anderen Interrupt unterbrochen werden.
der | Stackrahmen mit den Registern xPSR,PC,LR,R12,R0-R3 wird übergeben |
__STATIC_INLINE uint32_t SysTick_RTOS_Config | ( | uint32_t | ticks | ) |
void thread_delay | ( | uint32_t | tick | ) |
Diese Funktion entfernt den übergebenen Thread von der Ready-Liste und fügt ihn der Sleep-Liste hinzu.
Nach Ablauf der übergebenen Tickanzahl wird der Thread automatisch der Ready-Liste wieder hinzugefügt.
Tickanzahl | (Ein Tick entspricht hierbei dem Intervall des SysTicks) |
void Thread_init | ( | Thread_t * | Thread, |
void * | stack, | ||
uint32_t | stack_size, | ||
char | name[], | ||
void(*)() | pfunc, | ||
uint32_t | executiontime, | ||
uint8_t | priority | ||
) |
Diese Funktion initialisert einen Thread und fügt ihn der Ready-Liste hinzu.
Alle übergebenen Parameter werden den Attributen der Datenstruktur zugewiesen. Ebenfalls werden die CPU-Register des Threads für die erstmalige Ausführung initialisert.
Thread_t | *Thread: Übergabeparameter der angelegten Threaddatenstruktur (call by reference) void *stack: Übergabeparameter des Stackframes uint32_t stack_size: Übergabeparameter der Arraygröße char name[]: Name des Threads void (*pfunc)(): Übergabeparameter der Threadfunktion uint32_t executiontime: Ausführungszeit eines Threads uint8_t priority: Priorität eines Threads |
void thread_resume | ( | Thread_t * | Thread | ) |
Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu.
Threadobjekt |
uint16_t thread_stack_usage | ( | Thread_t * | Thread | ) |
Diese Funktion prüft den Stackbereich.
Der Stackbereich ist mit magischen Nummern beschrieben. Sobald eine Sequenz des Stackbereichs von der magischen Nummer abweicht, kann auf den überschriebenen Bereich zurückgeschlossen werden.
Threaddatenstruktur | wird übergeben |
void thread_suspend | ( | Thread_t * | Thread | ) |
Diese Funktion entfernt einen Thread von der Ready-Liste und löst gegebenenfalls einen Kontextwechsel aus.
Threadobjekt |
void update_executiontime | ( | void | ) |
Diese Funktion aktualisiert die Ausführungszeit der Threads.
Nach Ablauf der Ausführungszeit wird ein Kontextwechsel ausgelöst.
keine | Übergabeparameter |
void update_Thread_slp | ( | void | ) |
Diese Funktion aktualisiert die Verzögerungszeit der Threads.
Nach Ablauf der Verzögerungszeit wird der jeweilige Thread von der Sleep-Liste entfernt und der Ready-Liste hinzugefügt.
keine | Übergabeparameter |
uint8_t Thread_t** root |