Labor03
HeiOS_Thread.h File Reference

In dieser Header befinden sich alle Deklarationen, die für das HeiOS benötigt werden. More...

#include "LPC17xx.h"
#include "stdint.h"
#include <string.h>
#include "HeiOS_Settings.h"
Include dependency graph for HeiOS_Thread.h:
This graph shows which files directly or indirectly include this file:

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_tThread
 

Detailed Description

In dieser Header befinden sich alle Deklarationen, die für das HeiOS benötigt werden.

Author
Heinrich Ginter
Version
v1.0
Date
16.12.2015

Macro Definition Documentation

◆ Enter_Critical_Section

#define Enter_Critical_Section ( )    __set_BASEPRI(DISABLE_INTERRUPT_NUMBER << (8 - __NVIC_PRIO_BITS));

deaktiviert alle Interrupts, die den kritischen Bereich gefährden könnten

◆ Exit_Critical_Section

#define Exit_Critical_Section ( )    __set_BASEPRI(0U);

aktiviert alle Interrupts, die mit der Funktion Enter_Critical_Section() deaktiviert wurden

◆ thread_yield

#define thread_yield ( )    SCB->ICSR=SCB_ICSR_PENDSVSET_Msk;

triggert den PendSV-Handler an und löst somit einen Kontextwechsel aus

Typedef Documentation

◆ svc_call_t

typedef uint8_t(* svc_call_t) (Thread_t **root, Thread_t *Thread)

◆ Thread_IDLE_t

typedef struct ThreadIDLE Thread_IDLE_t

Deklaration der Idle-Thread-Datenstruktur.

◆ Thread_t

typedef struct Thread_struct Thread_t

Deklaration der Thread-Datenstruktur (TCB)

Function Documentation

◆ __svc() [1/2]

void __svc ( 0x00  )

◆ __svc() [2/2]

uint8_t __svc ( 0x01  )

◆ IdleThread()

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.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
keineÜbergabeparameter
Returns
keinen Rückgabeparameter
Here is the caller graph for this function:

◆ load_R4toR11()

void load_R4toR11 ( void  )

Diese Funktion ladet die Register R4-R8 mit Inline-Assembler.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
keineÜbergabeparameter
Returns
keinen Rückgabeparameter
Here is the caller graph for this function:

◆ OS_Start_Scheduler()

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.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
keineÜbergabeparameter
Returns
keinen Rückgabeparameter
Here is the call graph for this function:
Here is the caller graph for this function:

◆ priv_thread_remove()

uint8_t priv_thread_remove ( Thread_t **  root,
Thread_t Thread 
)

Diese Funktion entfernt das Threadobjekt aus der Liste.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
Listenankerund Threadobjekt
Returns
bei erfolgreicher Ausführung wird ein positiver Wert zurückgegeben ansonsten eine 0
Here is the caller graph for this function:

◆ priv_thread_sort_add()

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.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
EinListenanker sowie das Thread-Objekt werden übergeben.
Returns
liefert einen Integer zurück und symbolisiert dadurch eine erfolgreiche Ausführung
Here is the caller graph for this function:

◆ save_R4toR11()

void save_R4toR11 ( void  )

Diese Funktion sichert die Register R4-R8 mit Inline-Assembler.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
keineÜbergabeparameter
Returns
keinen Rückgabeparameter
Here is the caller graph for this function:

◆ setfpoutoutidle()

void setfpoutoutidle ( void(*)(void)  fp)

◆ SVC_Handler_service()

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.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
derStackrahmen mit den Registern xPSR,PC,LR,R12,R0-R3 wird übergeben
Returns
keinen Rückgabeparameter
Here is the caller graph for this function:

◆ SysTick_RTOS_Config()

__STATIC_INLINE uint32_t SysTick_RTOS_Config ( uint32_t  ticks)
Here is the caller graph for this function:

◆ thread_delay()

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.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
Tickanzahl(Ein Tick entspricht hierbei dem Intervall des SysTicks)
Returns
keinen Rückgabeparameter
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Thread_init()

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.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
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
Returns
keinen Rückgabeparameter
Here is the call graph for this function:
Here is the caller graph for this function:

◆ thread_resume()

void thread_resume ( Thread_t Thread)

Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
Threadobjekt
Returns
keinen Rückgabeparameter
Here is the call graph for this function:

◆ thread_stack_usage()

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.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
Threaddatenstrukturwird übergeben
Returns
liefert einen Integer zurück mit der Größe des überschriebenen Stackbereichs
Here is the caller graph for this function:

◆ thread_suspend()

void thread_suspend ( Thread_t Thread)

Diese Funktion entfernt einen Thread von der Ready-Liste und löst gegebenenfalls einen Kontextwechsel aus.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
Threadobjekt
Returns
keinen Rückgabeparameter
Here is the call graph for this function:

◆ update_executiontime()

void update_executiontime ( void  )

Diese Funktion aktualisiert die Ausführungszeit der Threads.

Nach Ablauf der Ausführungszeit wird ein Kontextwechsel ausgelöst.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
keineÜbergabeparameter
Returns
keinen Rückgabeparameter
Here is the caller graph for this function:

◆ update_Thread_slp()

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.

Author
Heinrich Ginter
Version
1.0
Date
16.12.2015
Parameters
keineÜbergabeparameter
Returns
keinen Rückgabeparameter
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ root

uint8_t Thread_t** root

◆ Thread

uint8_t Thread_t Thread_t* Thread