aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2011-12-12 13:27:16 +0000
committerDimitri Sokolyuk <demon@dim13.org>2011-12-12 13:27:16 +0000
commit0851cd0d947e3e2f35e0ab776526ab58f80c4d8c (patch)
tree9f479b6c4d44fa43740fb5ea2dbbb900b3429c7f
parentb0b677b866018b7eb291fea63b9180457539d818 (diff)
primitive round-robin
-rw-r--r--kernel/kernel.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index a4850c5..e408016 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -77,8 +77,11 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED)
kernel.task->deadline = nexthit;
rtr = kernel.task;
+ t = kernel.running;
+ do {
+ if (++t > kernel.last)
+ t = kernel.task;
- for (t = &kernel.task[1]; t <= kernel.last; t++) {
/* release tasks from time-wait-queue */
if (t->state == TIMEQ) {
if (DISTANCE(t->release, now) > 0)
@@ -96,7 +99,7 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED)
#endif
rtr = t;
}
- }
+ } while (t != kernel.running);
/* switch task */
kernel.running->sp = SP;