summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-11-27 02:06:57 +0100
committerMichal Idziorek <m.i@gmx.at>2014-11-27 02:06:57 +0100
commit7526cbb7ea06a1862c732d367a759917695e1f08 (patch)
tree677071be82b4102152af9c112a1a7235855af191
parente7b9569041521da7e0b67c30af7179c0af1e3738 (diff)
fixed iditoc mistake in multitask testing
-rw-r--r--kernel/syscalls.c4
-rw-r--r--kernel/task.c30
2 files changed, 25 insertions, 9 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 585950d..0f06479 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -179,6 +179,10 @@ int syscall_readdir(const char *name,fs_dirent *dirs,int max)
return fs_readdir(name,dirs,max);
}
+int syscall_wait()
+{
+}
+
int syscall_fork()
{
}
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;
}