aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-06-05 14:38:34 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-06-05 14:38:34 +0000
commit5ae33f2599073cf01d87acc79a68a99b21dcfd2f (patch)
treefb6c9a45e8e86f0e9e182774174305331adf4c0e /kernel/kernel.c
parenteff91acdf661803516ae159f49fd8daa64e13b6a (diff)
revert
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 0afd44a..b466351 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -64,6 +64,14 @@ struct kern {
uint8_t reboot;
} kern;
+ISR(TIMER1_OVF_vect)
+{
+ if (!kern.reboot)
+ wdt_reset();
+
+ ++kern.cycles;
+}
+
ISR(TIMER1_COMPA_vect, ISR_NAKED)
{
struct task *tp, *tmp;
@@ -90,6 +98,15 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED)
nexthit = dist;
}
+ /* reschedule current task if it's still at head of runq */
+ if (kern.cur == TAILQ_FIRST(kern.cur->rq)) {
+ TAILQ_REMOVE(kern.cur->rq, kern.cur, r_link);
+ if (kern.cur->prio > RT && kern.cur->prio < RR)
+ kern.cur->prio++;
+ kern.cur->rq = &kern.rq[kern.cur->prio];
+ TAILQ_INSERT_TAIL(kern.cur->rq, kern.cur, r_link);
+ }
+
/* pick hightes rq, cannot fail */
for (rq = kern.rq; TAILQ_EMPTY(rq); rq++)
;
@@ -106,26 +123,6 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED)
reti();
}
-ISR(TIMER1_OVF_vect)
-{
- if (!kern.reboot)
- wdt_reset();
-
- ++kern.cycles;
-
- /* reschedule current task if it's still at head of runq */
- if (kern.cur == TAILQ_FIRST(kern.cur->rq)) {
- TAILQ_REMOVE(kern.cur->rq, kern.cur, r_link);
- if (kern.cur->prio > RT && kern.cur->prio < RR)
- kern.cur->prio++;
- kern.cur->rq = &kern.rq[kern.cur->prio];
- TAILQ_INSERT_TAIL(kern.cur->rq, kern.cur, r_link);
-
- SCHEDULE();
- }
-
-}
-
void
init(uint8_t sema, uint8_t stack)
{