aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-06-16 12:59:52 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-06-16 12:59:52 +0000
commit3ac81216f8c552f9fbc234c625f3140b40981ab6 (patch)
treee5cbc04d7d02e438ccb932fed4ccacd5fe8aee47
parent5021e54266cf636201e64857630f400c5c3bd83c (diff)
drop expicit priority levels
-rw-r--r--kernel/dmx.c14
-rw-r--r--kernel/kernel.c13
-rw-r--r--kernel/kernel.h4
3 files changed, 14 insertions, 17 deletions
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);