aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-04-09 02:12:30 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-04-09 02:12:30 +0000
commit5dcff90c06486a62495b223e48e2693df02381c6 (patch)
tree201a3e2de547e55ece7fc33180668f16c3201b9a /kernel
parentef859f2e3c98e07d7730f834fd544da368a0cecf (diff)
introduce watchdog
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 9a4fe77..e7f571c 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -59,6 +59,7 @@ struct kern {
uint16_t cycles; /* clock high byte */
uint8_t semaphore; /* bitmap */
uint8_t maxid;
+ uint8_t reboot;
} kern;
ISR(TIMER1_OVF_vect)
@@ -80,6 +81,9 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED)
now = NOW(kern.cycles, TCNT1);
nexthit = UINT16_MAX;
+ if (!kern.reboot)
+ wdt_reset();
+
/* release waiting tasks */
TAILQ_FOREACH_SAFE(tp, &kern.tq, t_link, tmp) {
dist = DISTANCE(now, tp->release);
@@ -169,6 +173,9 @@ init(uint8_t prio, uint8_t sema, uint8_t stack)
kern.semaphore = 0;
kern.maxid = 0;
+ kern.reboot = 0;
+ wdt_enable(WDTO_15MS);
+
sei();
}
@@ -286,7 +293,7 @@ running(void)
void
reboot(void)
{
- wdt_enable(WDTO_15MS);
+ kern.reboot = 1;
}
void