X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fidle.c;h=7ba8d617d34a4177860e77876774a5ccb33d6bf8;hb=32d1445272120a254d77ce8d1af1f527da7a2c17;hp=ede234c34f4c296738e3da6ab1a8c8049b6853d6;hpb=368b5a0d273a9dc64e06d28e073b2577ba4c06fe;p=bertos.git diff --git a/bertos/kern/idle.c b/bertos/kern/idle.c index ede234c3..7ba8d617 100644 --- a/bertos/kern/idle.c +++ b/bertos/kern/idle.c @@ -31,16 +31,22 @@ * * \brief Idle loop for preemptive scheduling * - * \version $Id: proc.c 1616 2008-08-10 19:41:26Z bernie $ + * \version $Id$ * \author Bernie Innocenti */ +#include "idle.h" #include "proc.h" +#include // cpu_relax() #include +#include // INT_MIN +#include -static cpustack_t idle_stack[CONFIG_PROC_DEFSTACKSIZE / sizeof(cpustack_t)]; +struct Process *idle_proc; + +static PROC_DEFINE_STACK(idle_stack, KERN_MINSTACKSIZE); /** * The idle process @@ -58,13 +64,21 @@ static NORETURN void idle(void) { for (;;) { - TRACE; - //monitor_report(); - proc_yield(); // FIXME: CPU_IDLE + PAUSE; + proc_switch(); } } void idle_init(void) { - proc_new(idle, NULL, sizeof(idle_stack), idle_stack); + /* + * 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); }