From 5dcff90c06486a62495b223e48e2693df02381c6 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 9 Apr 2012 02:12:30 +0000 Subject: introduce watchdog --- kernel/kernel.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'kernel/kernel.c') 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 -- cgit v1.2.3