X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fidle.c;h=7ba8d617d34a4177860e77876774a5ccb33d6bf8;hb=32d1445272120a254d77ce8d1af1f527da7a2c17;hp=810560a1a790f6d4a5ed96ff80f66b7354a57d8f;hpb=fe0a14d1434098bfd0780d06a2a7e55f27940d27;p=bertos.git diff --git a/bertos/kern/idle.c b/bertos/kern/idle.c index 810560a1..7ba8d617 100644 --- a/bertos/kern/idle.c +++ b/bertos/kern/idle.c @@ -38,11 +38,15 @@ #include "idle.h" #include "proc.h" +#include // cpu_relax() #include +#include // INT_MIN +#include -// below there's a TRACE so we need a big stack -PROC_DEFINE_STACK(idle_stack, KERN_MINSTACKSIZE * 2); +struct Process *idle_proc; + +static PROC_DEFINE_STACK(idle_stack, KERN_MINSTACKSIZE); /** * The idle process @@ -60,14 +64,21 @@ static NORETURN void idle(void) { for (;;) { - TRACE; - //monitor_report(); - proc_yield(); // FIXME: CPU_IDLE + PAUSE; + proc_switch(); } } void idle_init(void) { - struct Process *idle_proc = proc_new(idle, NULL, sizeof(idle_stack), idle_stack); - proc_setPri(idle_proc, (int)~0); + /* + * Idle will be added to the ProcReadyList, but immediately removed + * after the first cpu_relax() execution. + * + * XXX: it would be better to never add idle_proc to the ProcReadyList, + * e.g., changing the prototype of proc_new() (or introducing a + * proc_new_nostart()) to allow the creation of "sleeping" tasks. + */ + idle_proc = proc_new(idle, NULL, sizeof(idle_stack), idle_stack); + proc_setPri(idle_proc, INT_MIN); }