From 652f877abd0d3a47d9b3fdb5ae27db0483e1cf94 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 5 Mar 2012 00:40:15 +0000 Subject: more debug output, yield after release --- kernel/kernel.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'kernel/kernel.c') diff --git a/kernel/kernel.c b/kernel/kernel.c index b8d2526..5d74199 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -75,16 +75,6 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED) PORTB ^= _BV(PB1); /* DEBUG */ #endif - if (kernel.current == kernel.idle) { - /* drop idle */ - TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); - --kernel.rqlen; - } else if (kernel.current == TAILQ_FIRST(&kernel.runq)) { - /* runq not changed && not empty -> yield */ - TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); - TAILQ_INSERT_TAIL(&kernel.runq, kernel.current, r_link); - } - /* release waiting tasks */ TAILQ_FOREACH_SAFE(tp, &kernel.timeq, t_link, tmp) { if (DISTANCE(tp->release, now) >= 0) { @@ -95,6 +85,16 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED) break; } + if (kernel.current == kernel.idle) { + /* drop idle */ + TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); + --kernel.rqlen; + } else if (kernel.current == TAILQ_FIRST(&kernel.runq)) { + /* runq not changed && not empty -> yield */ + TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); + TAILQ_INSERT_TAIL(&kernel.runq, kernel.current, r_link); + } + /* idle if nothing to run */ if (TAILQ_EMPTY(&kernel.runq)) { TAILQ_INSERT_TAIL(&kernel.runq, kernel.idle, r_link); @@ -287,3 +287,15 @@ running(void) { return kernel.current - kernel.idle; } + +uint8_t +rqlen(void) +{ + return kernel.rqlen; +} + +uint8_t +semaphore(void) +{ + return kernel.semaphore; +} -- cgit v1.2.3