EE445M RTOS
Taken at the University of Texas Spring 2015
os.h
Go to the documentation of this file.
1 /* -*- mode: c; c-basic-offset: 4; -*- */
2 /* Created by Hershal Bhave 2015-02-08 */
3 /* Revision History: Look in Git FGT */
4 
5 #ifndef __OS__
6 #define __OS__
7 
8 #include <stdint.h>
9 #include <stdbool.h>
10 
11 #include "inc/hw_ints.h"
12 
13 #include "libstd/nexus.h"
14 #include "libschedule/edf.h"
15 #include "thread_structures.h"
16 
22 #define OS_STACK_SIZE 100
23 
25 #define OS_NUM_POOLS 2
26 
28 #define OS_SYSTEM_POOL 0
29 
30 #define OS_REAL_TIME_POOL 0
31 
32 #define OS_INTERACTIVE_POOL 1
33 
35 #define os_spawn_thread(_thread, _priority) \
36  os_add_thread(_thread, priority)
37 
39 #define os_kill_thread(_thread) \
40  os_remove_thread(_thread)
41 
46 
49 
51 typedef struct hwcontext {
52  uint32_t r0;
53  uint32_t r1;
54  uint32_t r2;
55  uint32_t r3;
56  uint32_t r12;
57  uint32_t lr;
58  uint32_t pc;
59  uint32_t psr;
60 } hwcontext_t;
61 
63 typedef struct swcontext {
64  uint32_t r4;
65  uint32_t r5;
66  uint32_t r6;
67  uint32_t r7;
68  uint32_t r8;
69  uint32_t r9;
70  uint32_t r10;
71  uint32_t r11;
72  uint32_t lr;
73 } swcontext_t;
74 
79 
82 
85 
90 void os_threading_init(void);
91 
96 void _os_reset_thread_stack(tcb_t* tcb, task_t task);
97 
98 int8_t get_os_num_threads();
99 
105 
111 
117 
129 
130 /* TODO: doxygenize */
131 int32_t os_running_thread_id();
132 
138 void os_launch();
139 
142 #define os_surrender_context() \
143  os_suspend()
144 
145 void os_suspend();
146 
147 #endif
148 
#define OS_NUM_POOLS
Definition: os.h:25
uint32_t r11
Definition: os.h:71
tcb_t * os_add_thread(task_t)
Definition: os.c:72
void os_suspend()
Definition: os.c:380
uint32_t r2
Definition: os.h:54
uint32_t r6
Definition: os.h:66
uint32_t r4
Definition: os.h:64
void _os_reset_thread_stack(tcb_t *tcb, task_t task)
Definition: os.c:197
void(* task_t)()
Definition: defines.h:21
tcb_t * _os_next_dead_thread()
uint32_t r3
Definition: os.h:55
uint32_t pc
Definition: os.h:58
static tcb_t * OS_THREAD_POOL[2]
Definition: os.h:84
static tcb_t * os_running_threads
Definition: os.h:45
uint32_t r8
Definition: os.h:68
uint32_t r1
Definition: os.h:53
uint32_t r5
Definition: os.h:65
uint32_t r12
Definition: os.h:56
uint32_t psr
Definition: os.h:59
static tcb_t * os_dead_threads
Definition: os.h:48
uint32_t lr
Definition: os.h:72
void os_threading_init(void)
Definition: os.c:34
struct hwcontext hwcontext_t
void os_launch()
Definition: os.c:161
tcb_t * os_remove_thread(task_t)
Definition: os.c:106
int8_t get_os_num_threads()
Definition: os.c:68
uint32_t lr
Definition: os.h:57
struct swcontext swcontext_t
#define SCHEDULER_MAX_THREADS
static tcb_t OS_THREADS[SCHEDULER_MAX_THREADS]
Definition: os.h:81
tcb_t * os_tcb_of(task_t)
Definition: os.c:147
uint32_t r7
Definition: os.h:67
static tcb_t * OS_NEXT_THREAD
Definition: os.h:78
Definition: os.h:63
Definition: os.h:51
uint32_t r10
Definition: os.h:70
#define NULL
Definition: defines.h:32
int32_t os_running_thread_id()
Definition: os.c:142
uint32_t r9
Definition: os.h:69
uint32_t r0
Definition: os.h:52