diff options
author | Christian Cunningham <cc@localhost> | 2022-01-21 13:01:58 -0700 |
---|---|---|
committer | Christian Cunningham <cc@localhost> | 2022-01-21 13:01:58 -0700 |
commit | 367e20fa0c6f15e60d943cf222d41414fffd2318 (patch) | |
tree | 0ebd3266233eb49afeb42d84d97b9a7c93ea60eb | |
parent | ed7b9318bc9ac285250b117f87f47fe7f84af51b (diff) |
Added scheduling logic
-rw-r--r-- | include/globals.h | 1 | ||||
-rw-r--r-- | include/sys/schedule.h | 2 | ||||
-rw-r--r-- | src/globals.c | 1 | ||||
-rw-r--r-- | src/sys/schedule.c | 17 |
4 files changed, 20 insertions, 1 deletions
diff --git a/include/globals.h b/include/globals.h index 16845d5..cf37c06 100644 --- a/include/globals.h +++ b/include/globals.h @@ -20,6 +20,7 @@ extern unsigned long stimel; extern unsigned long stimeh; extern struct Drawer g_Drawer; extern struct Scheduler scheduler; +extern struct Thread usrloopthread; extern unsigned int gwidth, gheight, gpitch, gisrgb; extern unsigned char stacks_table[MAX_THREADS]; #endif diff --git a/include/sys/schedule.h b/include/sys/schedule.h index 90e82dd..c110533 100644 --- a/include/sys/schedule.h +++ b/include/sys/schedule.h @@ -50,7 +50,7 @@ void init_scheduler(void); // void add_thread(void* pc, void* arg, unsigned char priority); /// TODO: ENSURE IRQ/ FIQ entry switches /// to user mode then calls the SVC call -// extern void schedule(void); +extern void schedule(void); // void yield(void); // struct Thread* next_thread(void); diff --git a/src/globals.c b/src/globals.c index 99aa48f..1313bd9 100644 --- a/src/globals.c +++ b/src/globals.c @@ -19,6 +19,7 @@ __attribute__((section(".bss"))) unsigned long stimel; __attribute__((section(".bss"))) unsigned long stimeh; __attribute__((section(".bss"))) struct Drawer g_Drawer; __attribute__((section(".bss"))) struct Scheduler scheduler; +__attribute__((section(".bss"))) struct Thread usrloopthread; __attribute__((section(".bss"))) unsigned int gwidth; __attribute__((section(".bss"))) unsigned int gheight; __attribute__((section(".bss"))) unsigned int gpitch; diff --git a/src/sys/schedule.c b/src/sys/schedule.c index 0dc89e9..3aca0ff 100644 --- a/src/sys/schedule.c +++ b/src/sys/schedule.c @@ -1,5 +1,22 @@ +#include <globals.h> +#include <sys/schedule.h> + void init_scheduler(void) { // Set rthread to usrloopthread - an infinitely running thread so that the pointer will never be null + usrloopthread.pc = (void*)loop; + usrloopthread.sp = 0x0FCC; + usrloopthread.sp_base = 0x1000; + usrloopthread.mptr = 0; + usrloopthread.pid = -1; + usrloopthread.priority = -1; + usrloopthread.status = THREAD_READY; + scheduler.rthread = &usrloopthread; // Initialize Rotating Buffers } + +void loop(void) +{ + while(1) + asm volatile ("wfe"); +} |