From 5eaf06d25c23a33a4e921161e9f0786a88e2948f Mon Sep 17 00:00:00 2001 From: David Phillips Date: Sun, 13 Dec 2020 21:11:50 +1300 Subject: Set a 2 second watchdog timer --- Makefile | 2 +- altimeter.c | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 879452f..400aeff 100644 --- a/Makefile +++ b/Makefile @@ -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 #include +#include #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); -- cgit v1.1