aboutsummaryrefslogtreecommitdiffstats
path: root/src/kernel/task.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/task.c')
-rw-r--r--src/kernel/task.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/kernel/task.c b/src/kernel/task.c
index c5d09d4..304e608 100644
--- a/src/kernel/task.c
+++ b/src/kernel/task.c
@@ -31,28 +31,28 @@ static task_t *task_queue;
static uint8_t task_disable = 0;
static pid_t task_next_pid = 0;
-void task_svc(uint32_t *args)
+void task_svc(uint32_t n, uint32_t *ret, uint32_t *args)
{
- switch (args[0]) {
+ switch (n) {
case 0:
- task_exit(args[1]);
+ task_exit(args[0]);
break;
case 1:
- *((int *)args[1]) = task_fork();
+ *((int *)ret) = task_fork();
break;
case 2:
- *((int *)args[1]) = task_getpid();
+ *((int *)ret) = task_getpid();
break;
case 3:
- *((int *)args[4]) = task_waitpid(args[1], (int *)args[2],
- args[3]);
+ *((int *)ret) = task_waitpid(args[0], (int *)args[1],
+ args[2]);
break;
case 4:
- *((void **)args[2]) = task_sbrk(args[1]);
+ *((void **)ret) = task_sbrk(args[0]);
break;
case 5:
- *((uint32_t *)args[4]) = elf_execve((const char *)args[1],
- (char * const *)args[2], (char * const *)args[3]);
+ *((uint32_t *)ret) = elf_execve((const char *)args[0],
+ (char * const *)args[1], (char * const *)args[2]);
break;
default:
break;
@@ -325,7 +325,7 @@ void PendSV_Handler(void)
task_current = task_queue;
if (task_current->status.state == TASK_SLEEPING &&
- task_current->status.value <= ticks)
+ task_current->status.value < ticks)
task_current->status.state = TASK_RUNNING;
} while (task_current->status.state != TASK_RUNNING);