diff options
Diffstat (limited to 'kernel/task.c')
| -rw-r--r-- | kernel/task.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/kernel/task.c b/kernel/task.c index 620977e..2b964ee 100644 --- a/kernel/task.c +++ b/kernel/task.c @@ -72,41 +72,53 @@ uint32_t task_switch_next(uint32_t oldesp) if(current_task==-2)return oldesp; if(current_task!=-1)task_list[current_task].esp=oldesp; - + for(int i=0;i<MAX_TASKS;i++) { int pid=(current_task+1+i)%MAX_TASKS; // schedule round robin style if(task_list[pid].active) { - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"switch from %d to pid: %d (0x%08X)", current_task,pid,task_list[pid].esp); + // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"switch from %d to pid: %d (0x%08X)", current_task,pid,task_list[pid].esp); current_task=pid; return task_list[pid].esp; } } - // if no task found retunr the old esp return oldesp; + } + +// task testing // + volatile int c1,c2; volatile void test1() { - c1++; - // syscall_write(1,">",1); + while(1) + { + c1++; + syscall_write(1,">",1); + sleep(1); + } } volatile void test2() { - c2++; - // syscall_write(1,"<",1); + while(1) + { + c2++; + syscall_write(1,"<",1); + sleep(1); + } + } void task_init() { - task_create(1,test1); - task_create(2,test2); + task_create(0,test1); + task_create(1,test2); current_task=-1; } |
