From 62890bb17c4f324a15c817fdeeed2e60fc3e093e Mon Sep 17 00:00:00 2001 From: Adam Pippin Date: Sat, 18 Apr 2020 14:42:39 -0700 Subject: [PATCH] Cache signals during each kernel tick to make run order more predictable --- Kernel.cpp | 25 ++++++++++++------------- Kernel.h | 3 ++- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Kernel.cpp b/Kernel.cpp index b3003c9..1d34423 100644 --- a/Kernel.cpp +++ b/Kernel.cpp @@ -30,7 +30,7 @@ void Kernel_setup() last_tick_duration = 0; } -void Kernel_start(int (*callback)(int, unsigned int), unsigned long interval) +int Kernel_start(int (*callback)(int, unsigned int), unsigned long interval) { struct Task *process = Kernel_get_task(0); if (process->pid == -1) @@ -44,6 +44,8 @@ void Kernel_start(int (*callback)(int, unsigned int), unsigned long interval) process->run_accumulator = interval; process->signal = SIGNAL_START | SIGNAL_TICK; process->running = true; + + return process->pid; } void Kernel_enable(int pid) @@ -86,7 +88,7 @@ void Kernel_signal(unsigned int signal) { if (tasks[i].pid != 0 && tasks[i].running == true) { - tasks[i].signal |= signal; + tasks[i].signal_pending |= signal; } } } @@ -96,7 +98,7 @@ void Kernel_signal(int pid, unsigned int signal) struct Task *process = Kernel_get_task(pid); if (process->pid == pid) { - process->signal |= signal; + process->signal_pending |= signal; } } @@ -188,7 +190,7 @@ void Kernel_tick() unsigned long next_tick_due = ULONG_MAX; int running_tasks = 0; int last_exit_code = 0; - + for (int i=0; i