Labor03
HeiOS_Thread.h
Go to the documentation of this file.
1 
7 #ifndef __HeiOS_Thread_H
8 #define __HeiOS_Thread_H
9 
10 /*all necessary includes*/
11 #include "LPC17xx.h"
12 #include "stdint.h"
13 #include <string.h>
14 #include "HeiOS_Settings.h"
15 
19 #define Enter_Critical_Section() __set_BASEPRI(DISABLE_INTERRUPT_NUMBER << (8 - __NVIC_PRIO_BITS));
20 
24 #define Exit_Critical_Section() __set_BASEPRI(0U);
25 
29 #define thread_yield() SCB->ICSR=SCB_ICSR_PENDSVSET_Msk;
30 
31 
35 typedef struct Thread_struct
36 {
39  uint32_t *PSP;
41  char name[20];
43  void (*pfunc)();
45  uint8_t priority;
47  uint8_t identity;
49  uint32_t executiontime;
51  uint32_t tickcount;
53  uint32_t delay;
55  uint32_t ssize;
57  uint32_t *stack;
59 
63 typedef struct ThreadIDLE
64 {
68  uint32_t PSP;
70  uint8_t active;
72 
73 #ifdef __cplusplus
74 
75 extern "C" {
76 
77 #endif
78 
79 extern void setfpoutoutidle(void (*fp) (void));
80 
81 /*Function for initializing the Threads */
82 extern void Thread_init(Thread_t *Thread,void *stack, uint32_t stack_size,char name[],void (*pfunc)(),uint32_t executiontime, uint8_t priority);
83 
84 /*Function for checking the stack usage*/
85 extern uint16_t thread_stack_usage (Thread_t *Thread);
86 
87 /*functions for the threadmanagement*/
90 extern void thread_suspend (Thread_t *Thread);
91 extern void thread_resume (Thread_t *Thread);
92 extern void thread_delay (uint32_t tick);
93 
94 /*SVC CALL*/
95 extern void SVC_Handler_service(uint32_t * svc_args);
96 
97 /*typedef for SVC instruction*/
98 typedef uint8_t (*svc_call_t)(Thread_t **root,Thread_t *Thread);
99 
100 /*SVC instruction*/
101 extern void __svc(0x00) svc_thread_yield(void); /*can only set pendsv in handler mode*/
102 extern uint8_t __svc(0x01) svc_thread(svc_call_t,Thread_t **root,Thread_t *Thread);
103 
104 /*Function declaration for scheduler*/
105 extern void OS_Start_Scheduler(void);
106 extern void save_R4toR11(void);
107 extern void load_R4toR11(void);
108 
109 /*updates the sleep queue and adds a thread to ready queue if his time is over*/
110 extern void update_Thread_slp(void);
111 /*updates the execution time of each Thread, if the the tickcounter is equal to the execution time the PendSV-Handler get triggered*/
112 extern void update_executiontime(void);
113 /*Function of the Idle Thread*/
114 extern void IdleThread(void);
115 
116 /*This inline function configures the Systick Timer*/
117 __STATIC_INLINE uint32_t SysTick_RTOS_Config(uint32_t ticks)
118 {
119  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {
120  return (1UL); /* Reload value impossible */
121  }
122 
123  SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
124  NVIC_SetPriority(SysTick_IRQn,30); /* set Priority for Systick Interrupt to lowest*/
125  SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
126  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
127  SysTick_CTRL_TICKINT_Msk |
128  SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
129  return (0UL); /* Function successful */
130 }
131 
132 #ifdef __cplusplus
133 }
134 #endif
135 
136 #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)