summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel.c6
-rw-r--r--kernel/task.c5
2 files changed, 8 insertions, 3 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index eee66d7..9e8108f 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -158,9 +158,6 @@ void kernel_main(uint32_t initial_stack)
int_install_ir(17, 0b10001110, 0x08,&int_irq17);
int_install_ir(18, 0b10001110, 0x08,&int_irq18);
- // multitasking
- task_init();
-
// now we can enable interrupts back again
int_enable();
@@ -175,6 +172,9 @@ void kernel_main(uint32_t initial_stack)
//init shell
shell_init();
+
+ // multitasking
+ task_init();
/*
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"test mem");
diff --git a/kernel/task.c b/kernel/task.c
index fb71640..8884079 100644
--- a/kernel/task.c
+++ b/kernel/task.c
@@ -5,6 +5,8 @@
#include "../lib/logger/log.h" // logger facilities
#define FOOLOS_MODULE_NAME "task"
+int started;
+
void task_test1()
{
uint8_t c1;
@@ -88,6 +90,8 @@ void task_create(int pid,void(*thread)())
uint32_t task_switch_next(uint32_t oldesp)
{
+
+ if(started!=0xabcde) return oldesp;
if(CurrentTask != -1){ //Were we even running a task?
@@ -119,6 +123,7 @@ void stack_trace(uint32_t *stack,int size)
void task_init()
{
+ started=0xabcde;
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"init multitasking.");
task_create(0,task_test1);
task_create(1,task_test2);