diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | altimeter.c | 16 |
2 files changed, 16 insertions, 2 deletions
@@ -6,7 +6,7 @@ QEMU_AVR ?= qemu-system-avr MCU ?= atmega32u4 SIM_MCU ?= atmega2560 CFLAGS += -DF_CPU=16000000UL -mmcu=$(MCU) -O3 -SIM_CFLAGS += -DF_CPU=16000000UL -mmcu=$(SIM_MCU) -g3 -gdwarf-2 +SIM_CFLAGS += -DF_CPU=16000000UL -mmcu=$(SIM_MCU) -g3 -gdwarf-2 -DWDT_DISABLE $(shell mkdir -p build/{real,sim}) diff --git a/altimeter.c b/altimeter.c index 3133d2a..429976c 100644 --- a/altimeter.c +++ b/altimeter.c @@ -5,11 +5,21 @@ #include <avr/sleep.h> #include <avr/interrupt.h> +#include <avr/wdt.h> #include "barometer.h" #include "display.h" #include "util.h" +#ifdef WDT_DISABLE +# warning "WDT disabled in this build" +# define WDT_SETUP_MAYBE(x) +# define WDT_PAT_MAYBE() +#else +# define WDT_SETUP_MAYBE(x) do{wdt_enable(x);}while(0) +# define WDT_PAT_MAYBE() do{wdt_reset();}while(0) +#endif + /* ISR for collecting and displaying pressure, altitude data etc */ ISR(TIMER1_COMPA_vect) { @@ -69,7 +79,8 @@ ISR(TIMER1_COMPA_vect) blank_to_eol(line, sizeof(line)); display_set_cursor(0, 3); display_write(line); - return; + + WDT_PAT_MAYBE(); } int main(void) @@ -92,6 +103,9 @@ int main(void) USBCON &= ~(1 << USBE); #endif + /* main body should take no longer than 1 second to run */ + WDT_SETUP_MAYBE(WDTO_2S); + sei(); while(1) { set_sleep_mode(SLEEP_MODE_IDLE); |