From 3ac81216f8c552f9fbc234c625f3140b40981ab6 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 16 Jun 2012 12:59:52 +0000 Subject: drop expicit priority levels --- kernel/dmx.c | 14 +++++++------- kernel/kernel.c | 13 +++++-------- kernel/kernel.h | 4 ++-- 3 files changed, 14 insertions(+), 17 deletions(-) (limited to 'kernel') diff --git a/kernel/dmx.c b/kernel/dmx.c index 97f3731..8ab05c7 100644 --- a/kernel/dmx.c +++ b/kernel/dmx.c @@ -38,13 +38,13 @@ main() uart_init(); lcd_init(); - exec(heartbeat, NULL, DEFSTACK, Low); - exec(rgb, &rgbargs, BIGSTACK, High); - exec(pwm, &pwmargs[0], DEFSTACK, RT); - exec(pwm, &pwmargs[1], DEFSTACK, RT); - exec(pwm, &pwmargs[2], DEFSTACK, RT); - exec(adc, &adcarg, BIGSTACK, Low); - exec(clock, NULL, BIGSTACK, Low); + exec(heartbeat, NULL, DEFSTACK); + exec(rgb, &rgbargs, BIGSTACK); + exec(pwm, &pwmargs[0], DEFSTACK); + exec(pwm, &pwmargs[1], DEFSTACK); + exec(pwm, &pwmargs[2], DEFSTACK); + exec(adc, &adcarg, BIGSTACK); + exec(clock, NULL, BIGSTACK); #if 0 exec(ctrl, NULL, BIGSTACK); exec(cmd, &rgbargs, DEFSTACK); diff --git a/kernel/kernel.c b/kernel/kernel.c index 85c98fb..9becf07 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -43,7 +43,6 @@ struct task { uint8_t *stack; /* stack area */ uint8_t id; /* task id */ uint8_t prio; - uint8_t defprio; struct queue *rq; TAILQ_ENTRY(task) r_link; TAILQ_ENTRY(task) t_link; @@ -106,7 +105,7 @@ ISR(TIMER1_COMPA_vect) while ((tp = TAILQ_FIRST(&kern.tq)) && SPAN(now, tp->release) <= 0) { TAILQ_REMOVE(&kern.tq, tp, t_link); /* raise priority */ - if (tp->prio > tp->defprio && tp->prio < Idle + 1) + if (tp->prio > High) tp->prio--; tp->rq = &kern.rq[tp->prio]; TAILQ_INSERT_TAIL(tp->rq, tp, r_link); @@ -122,7 +121,7 @@ ISR(TIMER1_COMPB_vect) /* reschedule current task if it've used its time slice */ TAILQ_REMOVE(kern.cur->rq, kern.cur, r_link); /* lower priority */ - if (kern.cur->prio > kern.cur->defprio && kern.cur->prio < Idle + 1) + if (kern.cur->prio < Low) kern.cur->prio++; kern.cur->rq = &kern.rq[kern.cur->prio]; TAILQ_INSERT_TAIL(kern.cur->rq, kern.cur, r_link); @@ -167,7 +166,6 @@ init(uint8_t sema, uint8_t stack) /* init idle task */ kern.idle = calloc(1, sizeof(struct task)); kern.idle->prio = Idle; - kern.idle->defprio = Idle; kern.idle->id = 0; kern.idle->release = 0; kern.idle->sp = SP; /* not really needed */ @@ -187,7 +185,7 @@ init(uint8_t sema, uint8_t stack) } void -exec(void (*fun)(void *), void *args, uint8_t stack, uint8_t prio) +exec(void (*fun)(void *), void *args, uint8_t stack) { struct task *tp; uint8_t *sp; @@ -212,8 +210,7 @@ exec(void (*fun)(void *), void *args, uint8_t stack, uint8_t prio) sp -= 6; memset(sp, 0, 6); /* r26-r31 */ - tp->prio = prio; - tp->defprio = prio; + tp->prio = High; tp->id = ++kern.maxid; tp->release = 0; tp->sp = (uint16_t)sp; /* SP */ @@ -252,7 +249,7 @@ signal(uint8_t chan) /* release first waiting task from wait queue */ TAILQ_REMOVE(&kern.wq[chan], tp, w_link); /* raise priority */ - if (tp->prio > tp->defprio && tp->prio < Idle + 1) + if (tp->prio > High) tp->prio--; tp->rq = &kern.rq[tp->prio]; TAILQ_INSERT_TAIL(tp->rq, tp, r_link); diff --git a/kernel/kernel.h b/kernel/kernel.h index 4e2f601..afca4d3 100644 --- a/kernel/kernel.h +++ b/kernel/kernel.h @@ -69,12 +69,12 @@ #define MSEC(T) ((uint32_t)(T) * kHz) #define SEC(T) ((uint32_t)(T) * Hz) -enum Prio { RT, High, Low, RR, Idle, nPrio }; +enum Prio { High, Mid, Low, Idle, nPrio }; /* __BEGIN_DECLS */ void init(uint8_t sema, uint8_t stack); -void exec(void (*fun)(void *), void *args, uint8_t stack, uint8_t prio); +void exec(void (*fun)(void *), void *args, uint8_t stack); void wait(uint8_t chan); void signal(uint8_t chan); -- cgit v1.2.3