aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel.c
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 /kernel/kernel.c
parent5021e54266cf636201e64857630f400c5c3bd83c (diff)
drop expicit priority levels
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c13
1 files changed, 5 insertions, 8 deletions
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);