HeiOS_Thread.h
Go to the documentation of this file.
#ifndef __HeiOS_Thread_H
#define __HeiOS_Thread_H
/*all necessary includes*/
#include "LPC17xx.h"
#include "stdint.h"
#include <string.h>
#include "HeiOS_Settings.h"
#define Enter_Critical_Section() __set_BASEPRI(DISABLE_INTERRUPT_NUMBER << (8 - __NVIC_PRIO_BITS));
#define Exit_Critical_Section() __set_BASEPRI(0U);
#define thread_yield() SCB->ICSR=SCB_ICSR_PENDSVSET_Msk;
typedef struct Thread_struct
{
struct Thread_struct *next;
uint32_t *PSP;
char name[20];
void (*pfunc)();
uint8_t priority;
uint8_t identity;
uint32_t executiontime;
uint32_t tickcount;
uint32_t delay;
uint32_t ssize;
uint32_t *stack;
} Thread_t;
typedef struct ThreadIDLE
{
uint32_t IdleThreadStack[IDLE_THREADSTACKSIZE];
uint32_t PSP;
uint8_t active;
} Thread_IDLE_t;
#ifdef __cplusplus
extern "C" {
#endif
extern void setfpoutoutidle(void (*fp) (void));
/*Function for initializing the Threads */
extern void Thread_init(Thread_t *Thread,void *stack, uint32_t stack_size,char name[],void (*pfunc)(),uint32_t executiontime, uint8_t priority);
/*Function for checking the stack usage*/
extern uint16_t thread_stack_usage (Thread_t *Thread);
/*functions for the threadmanagement*/
extern uint8_t priv_thread_sort_add(Thread_t **root,Thread_t *Thread);
extern uint8_t priv_thread_remove(Thread_t **root,Thread_t *Thread);
extern void thread_suspend (Thread_t *Thread);
extern void thread_resume (Thread_t *Thread);
extern void thread_delay (uint32_t tick);
/*SVC CALL*/
extern void SVC_Handler_service(uint32_t * svc_args);
/*typedef for SVC instruction*/
typedef uint8_t (*svc_call_t)(Thread_t **root,Thread_t *Thread);
/*SVC instruction*/
extern void __svc(0x00) svc_thread_yield(void); /*can only set pendsv in handler mode*/
extern uint8_t __svc(0x01) svc_thread(svc_call_t,Thread_t **root,Thread_t *Thread);
/*Function declaration for scheduler*/
extern void OS_Start_Scheduler(void);
extern void save_R4toR11(void);
extern void load_R4toR11(void);
/*updates the sleep queue and adds a thread to ready queue if his time is over*/
extern void update_Thread_slp(void);
/*updates the execution time of each Thread, if the the tickcounter is equal to the execution time the PendSV-Handler get triggered*/
extern void update_executiontime(void);
/*Function of the Idle Thread*/
extern void IdleThread(void);
/*This inline function configures the Systick Timer*/
__STATIC_INLINE uint32_t SysTick_RTOS_Config(uint32_t ticks)
{
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {
return (1UL); /* Reload value impossible */
}
SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
NVIC_SetPriority(SysTick_IRQn,30); /* set Priority for Systick Interrupt to lowest*/
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0UL); /* Function successful */
}
#ifdef __cplusplus
}
#endif
#endif
Thread_struct::PSP
uint32_t * PSP
Definition: HeiOS_Thread.h:39
Thread_ready
Thread_t * Thread_ready
Definition: HeiOS_Thread.c:22
thread_resume
void thread_resume(Thread_t *Thread)
Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu.
Definition: HeiOS_Thread.c:282
Thread_run
Thread_t * Thread_run
Definition: HeiOS_Thread.c:26
update_executiontime
void update_executiontime(void)
Diese Funktion aktualisiert die Ausführungszeit der Threads.
Definition: HeiOS_Thread.c:613
thread_suspend
void thread_suspend(Thread_t *Thread)
Diese Funktion entfernt einen Thread von der Ready-Liste und löst gegebenenfalls einen Kontextwechsel au...
Definition: HeiOS_Thread.c:264
IdleThread
void IdleThread(void)
Diese Funktion durchläuft eine Endlosschleife und sorgt für einen definierten Zustand, falls kein Thread für die...
Definition: HeiOS_Thread.c:562
FixedPriority_scheduler
Thread_t * FixedPriority_scheduler(Thread_t **Thread_ready, Thread_IDLE_t *IDLE_Thread)
Definition: FixedPriority.c:21
save_R4toR11
void save_R4toR11(void)
Diese Funktion sichert die Register R4-R8 mit Inline-Assembler.
Definition: HeiOS_Thread.c:473
thread_resume
void thread_resume(Thread_t *Thread)
Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu.
Definition: HeiOS_Thread.c:282
SVC_Handler
__asm void SVC_Handler(void)
Diese Funktion ermittelt mithile von embedded Assembler den verwendeten Stackpointer.
Definition: HeiOS_Thread.c:317
IdleThread
void IdleThread(void)
Diese Funktion durchläuft eine Endlosschleife und sorgt für einen definierten Zustand, falls kein Thread für die...
Definition: HeiOS_Thread.c:562
Thread_struct::identity
uint8_t identity
Definition: HeiOS_Thread.h:47
IDLE_THREADSTACKSIZE
#define IDLE_THREADSTACKSIZE
Festlegung der Stackgröße für den IDLE-Thread (in KB)
Definition: HeiOS_Settings.h:19
THREADNUMBER
#define THREADNUMBER
Definition: HeiOS_Settings.h:14
Thread_struct::next
struct Thread_struct * next
Definition: HeiOS_Thread.h:37
Thread_struct::priority
uint8_t priority
Definition: HeiOS_Thread.h:45
fpoutputidle
void(* fpoutputidle)(void)
Definition: HeiOS_Thread.c:14
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 bes...
Definition: HeiOS_Thread.c:337
PendSV_Handler
void PendSV_Handler(void)
Diese Funktion führt den Kontextwechsel aus.
Definition: HeiOS_Thread.c:411
Thread_IDLE_t
struct ThreadIDLE Thread_IDLE_t
Deklaration der Idle-Thread-Datenstruktur.
svc_call_t
uint8_t(* svc_call_t)(Thread_t **root, Thread_t *Thread)
Definition: HeiOS_Thread.h:98
load_R4toR11
void load_R4toR11(void)
Diese Funktion ladet die Register R4-R8 mit Inline-Assembler.
Definition: HeiOS_Thread.c:491
SysTick_RTOS_Config
__STATIC_INLINE uint32_t SysTick_RTOS_Config(uint32_t ticks)
Definition: HeiOS_Thread.h:117
Thread_struct::delay
uint32_t delay
Definition: HeiOS_Thread.h:53
Thread_struct::executiontime
uint32_t executiontime
Definition: HeiOS_Thread.h:49
Thread_struct
Definition: HeiOS_Thread.h:36
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....
Definition: HeiOS_Thread.c:300
TICKRATE
#define TICKRATE
Festlegung des SysTickintervalls in ms.
Definition: HeiOS_Settings.h:24
load_R4toR11
__asm void load_R4toR11(void)
Diese Funktion ladet die Register R4-R8 mit Inline-Assembler.
Definition: HeiOS_Thread.c:491
ThreadIDLE::IdleThreadStack
uint32_t IdleThreadStack[IDLE_THREADSTACKSIZE]
Definition: HeiOS_Thread.h:66
setfpoutoutidle
void setfpoutoutidle(void(*fp)(void))
Definition: HeiOS_Thread.c:29
ThreadIDLE::active
uint8_t active
Definition: HeiOS_Thread.h:70
Thread_struct::ssize
uint32_t ssize
Definition: HeiOS_Thread.h:55
ThreadIDLE::PSP
uint32_t PSP
Definition: HeiOS_Thread.h:68
IDLE_Thread
Thread_IDLE_t IDLE_Thread
Definition: HeiOS_Thread.c:19
thread_yield
#define thread_yield()
triggert den PendSV-Handler an und löst somit einen Kontextwechsel aus
Definition: HeiOS_Thread.h:29
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.
Definition: HeiOS_Thread.c:51
Thread_struct::pfunc
void(* pfunc)()
Definition: HeiOS_Thread.h:43
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.
Definition: HeiOS_Thread.c:51
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....
Definition: HeiOS_Thread.c:300
HeiOS_Thread.h
In dieser Header befinden sich alle Deklarationen, die für das HeiOS benötigt werden.
THREAD_STACK_MARK
#define THREAD_STACK_MARK
Die magische Nummer für die Stacküberprüfung kann hier festgelegt werden.
Definition: HeiOS_Settings.h:54
ThreadIDLE
Definition: HeiOS_Thread.h:64
thread_stack_usage
uint16_t thread_stack_usage(Thread_t *Thread)
Diese Funktion prüft den Stackbereich.
HeiOS_Settings.h
Hier werden die Einstellungen für das Rtos vorgenommen.
Thread_struct::name
char name[20]
Definition: HeiOS_Thread.h:41
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 bes...
Definition: HeiOS_Thread.c:337
update_Thread_slp
void update_Thread_slp(void)
Diese Funktion aktualisiert die Verzögerungszeit der Threads.
Definition: HeiOS_Thread.c:578
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....
Definition: HeiOS_Thread.c:180
SystemCoreClock
uint32_t SystemCoreClock
Definition: system_LPC17xx.c:431
update_Thread_slp
void update_Thread_slp(void)
Diese Funktion aktualisiert die Verzögerungszeit der Threads.
Definition: HeiOS_Thread.c:578
Thread_slp
Thread_t * Thread_slp
Definition: HeiOS_Thread.c:24
priv_thread_remove
uint8_t priv_thread_remove(Thread_t **root, Thread_t *Thread)
Diese Funktion entfernt das Threadobjekt aus der Liste.
Definition: HeiOS_Thread.c:230
FixedPriority.h
Diese Headerdatei beinhaltet die Funktionsdeklaration des FixedPriority-Schedulers.
Thread_t
struct Thread_struct Thread_t
Deklaration der Thread-Datenstruktur (TCB)
save_R4toR11
__asm void save_R4toR11(void)
Diese Funktion sichert die Register R4-R8 mit Inline-Assembler.
Definition: HeiOS_Thread.c:473
priv_thread_remove
uint8_t priv_thread_remove(Thread_t **root, Thread_t *Thread)
Diese Funktion entfernt das Threadobjekt aus der Liste.
Definition: HeiOS_Thread.c:230
root
uint8_t Thread_t ** root
Definition: HeiOS_Thread.h:102
OS_Start_Scheduler
void OS_Start_Scheduler(void)
Diese Funktion initialisiert das OS und sorgt anschließend für den Wechsel in den Idlethread.
Definition: HeiOS_Thread.c:513
Thread_struct::stack
uint32_t * stack
Definition: HeiOS_Thread.h:57
Thread
uint8_t Thread_t Thread_t * Thread
Definition: HeiOS_Thread.h:102
setfpoutoutidle
void setfpoutoutidle(void(*fp)(void))
Definition: HeiOS_Thread.c:29
OS_Start_Scheduler
void OS_Start_Scheduler(void)
Diese Funktion initialisiert das OS und sorgt anschließend für den Wechsel in den Idlethread.
Definition: HeiOS_Thread.c:513
update_executiontime
void update_executiontime(void)
Diese Funktion aktualisiert die Ausführungszeit der Threads.
Definition: HeiOS_Thread.c:613
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....
Definition: HeiOS_Thread.c:180
SysTick_Handler
void SysTick_Handler(void)
Diese Funktion wird in regelmäßigen Abständen ausgeführt.
Definition: HeiOS_Thread.c:380
thread_suspend
void thread_suspend(Thread_t *Thread)
Diese Funktion entfernt einen Thread von der Ready-Liste und löst gegebenenfalls einen Kontextwechsel au...
Definition: HeiOS_Thread.c:264
Thread_struct::tickcount
uint32_t tickcount
Definition: HeiOS_Thread.h:51
__svc
void __svc(0x00) svc_thread_yield(void)