Go to the documentation of this file.
7 #ifndef __HeiOS_Thread_H
8 #define __HeiOS_Thread_H
19 #define Enter_Critical_Section() __set_BASEPRI(DISABLE_INTERRUPT_NUMBER << (8 - __NVIC_PRIO_BITS));
24 #define Exit_Critical_Section() __set_BASEPRI(0U);
29 #define thread_yield() SCB->ICSR=SCB_ICSR_PENDSVSET_Msk;
82 extern void Thread_init(
Thread_t *
Thread,
void *stack, uint32_t stack_size,
char name[],
void (*pfunc)(),uint32_t executiontime, uint8_t priority);
101 extern void __svc(0x00) svc_thread_yield(
void);
119 if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {
123 SysTick->LOAD = (uint32_t)(ticks - 1UL);
124 NVIC_SetPriority(SysTick_IRQn,30);
126 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
127 SysTick_CTRL_TICKINT_Msk |
128 SysTick_CTRL_ENABLE_Msk;
uint32_t * PSP
Definition: HeiOS_Thread.h:39
Thread_t * Thread_ready
Definition: HeiOS_Thread.c:22
void thread_resume(Thread_t *Thread)
Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu.
Definition: HeiOS_Thread.c:282
Thread_t * Thread_run
Definition: HeiOS_Thread.c:26
void update_executiontime(void)
Diese Funktion aktualisiert die Ausführungszeit der Threads.
Definition: HeiOS_Thread.c:613
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
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_t * FixedPriority_scheduler(Thread_t **Thread_ready, Thread_IDLE_t *IDLE_Thread)
Definition: FixedPriority.c:21
void save_R4toR11(void)
Diese Funktion sichert die Register R4-R8 mit Inline-Assembler.
Definition: HeiOS_Thread.c:473
void thread_resume(Thread_t *Thread)
Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu.
Definition: HeiOS_Thread.c:282
__asm void SVC_Handler(void)
Diese Funktion ermittelt mithile von embedded Assembler den verwendeten Stackpointer.
Definition: HeiOS_Thread.c:317
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
uint8_t identity
Definition: HeiOS_Thread.h:47
#define IDLE_THREADSTACKSIZE
Festlegung der Stackgröße für den IDLE-Thread (in KB)
Definition: HeiOS_Settings.h:19
#define THREADNUMBER
Definition: HeiOS_Settings.h:14
struct Thread_struct * next
Definition: HeiOS_Thread.h:37
uint8_t priority
Definition: HeiOS_Thread.h:45
void(* fpoutputidle)(void)
Definition: HeiOS_Thread.c:14
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
void PendSV_Handler(void)
Diese Funktion führt den Kontextwechsel aus.
Definition: HeiOS_Thread.c:411
struct ThreadIDLE Thread_IDLE_t
Deklaration der Idle-Thread-Datenstruktur.
uint8_t(* svc_call_t)(Thread_t **root, Thread_t *Thread)
Definition: HeiOS_Thread.h:98
void load_R4toR11(void)
Diese Funktion ladet die Register R4-R8 mit Inline-Assembler.
Definition: HeiOS_Thread.c:491
__STATIC_INLINE uint32_t SysTick_RTOS_Config(uint32_t ticks)
Definition: HeiOS_Thread.h:117
uint32_t delay
Definition: HeiOS_Thread.h:53
uint32_t executiontime
Definition: HeiOS_Thread.h:49
Definition: HeiOS_Thread.h:36
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
#define TICKRATE
Festlegung des SysTickintervalls in ms.
Definition: HeiOS_Settings.h:24
__asm void load_R4toR11(void)
Diese Funktion ladet die Register R4-R8 mit Inline-Assembler.
Definition: HeiOS_Thread.c:491
uint32_t IdleThreadStack[IDLE_THREADSTACKSIZE]
Definition: HeiOS_Thread.h:66
void setfpoutoutidle(void(*fp)(void))
Definition: HeiOS_Thread.c:29
uint8_t active
Definition: HeiOS_Thread.h:70
uint32_t ssize
Definition: HeiOS_Thread.h:55
uint32_t PSP
Definition: HeiOS_Thread.h:68
Thread_IDLE_t IDLE_Thread
Definition: HeiOS_Thread.c:19
#define thread_yield()
triggert den PendSV-Handler an und löst somit einen Kontextwechsel aus
Definition: HeiOS_Thread.h:29
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
void(* pfunc)()
Definition: HeiOS_Thread.h:43
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
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
In dieser Header befinden sich alle Deklarationen, die für das HeiOS benötigt werden.
#define THREAD_STACK_MARK
Die magische Nummer für die Stacküberprüfung kann hier festgelegt werden.
Definition: HeiOS_Settings.h:54
Definition: HeiOS_Thread.h:64
uint16_t thread_stack_usage(Thread_t *Thread)
Diese Funktion prüft den Stackbereich.
Hier werden die Einstellungen für das Rtos vorgenommen.
char name[20]
Definition: HeiOS_Thread.h:41
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
void update_Thread_slp(void)
Diese Funktion aktualisiert die Verzögerungszeit der Threads.
Definition: HeiOS_Thread.c:578
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
uint32_t SystemCoreClock
Definition: system_LPC17xx.c:431
void update_Thread_slp(void)
Diese Funktion aktualisiert die Verzögerungszeit der Threads.
Definition: HeiOS_Thread.c:578
Thread_t * Thread_slp
Definition: HeiOS_Thread.c:24
uint8_t priv_thread_remove(Thread_t **root, Thread_t *Thread)
Diese Funktion entfernt das Threadobjekt aus der Liste.
Definition: HeiOS_Thread.c:230
Diese Headerdatei beinhaltet die Funktionsdeklaration des FixedPriority-Schedulers.
struct Thread_struct Thread_t
Deklaration der Thread-Datenstruktur (TCB)
__asm void save_R4toR11(void)
Diese Funktion sichert die Register R4-R8 mit Inline-Assembler.
Definition: HeiOS_Thread.c:473
uint8_t priv_thread_remove(Thread_t **root, Thread_t *Thread)
Diese Funktion entfernt das Threadobjekt aus der Liste.
Definition: HeiOS_Thread.c:230
uint8_t Thread_t ** root
Definition: HeiOS_Thread.h:102
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
uint32_t * stack
Definition: HeiOS_Thread.h:57
uint8_t Thread_t Thread_t * Thread
Definition: HeiOS_Thread.h:102
void setfpoutoutidle(void(*fp)(void))
Definition: HeiOS_Thread.c:29
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
void update_executiontime(void)
Diese Funktion aktualisiert die Ausführungszeit der Threads.
Definition: HeiOS_Thread.c:613
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
void SysTick_Handler(void)
Diese Funktion wird in regelmäßigen Abständen ausgeführt.
Definition: HeiOS_Thread.c:380
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
uint32_t tickcount
Definition: HeiOS_Thread.h:51
void __svc(0x00) svc_thread_yield(void)