diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index cc1d3c5b4c..44102ef180 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -45,13 +45,16 @@ #include "stepper.h" #include "temperature.h" #include "cardreader.h" -#include "watchdog.h" #include "configuration_store.h" #include "language.h" #include "pins_arduino.h" #include "math.h" #include "buzzer.h" +#if ENABLED(USE_WATCHDOG) + #include "watchdog.h" +#endif + #if ENABLED(BLINKM) #include "blinkm.h" #include "Wire.h" @@ -681,7 +684,11 @@ void setup() { tp_init(); // Initialize temperature loop plan_init(); // Initialize planner; - watchdog_init(); + + #if ENABLED(USE_WATCHDOG) + watchdog_init(); + #endif + st_init(); // Initialize stepper, this enables interrupts! setup_photpin(); servo_init(); diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 3b257f062c..e58ecf4816 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -21,11 +21,13 @@ #include "Marlin.h" #include "ultralcd.h" #include "temperature.h" -#include "watchdog.h" #include "language.h" - #include "Sd2PinMap.h" +#if ENABLED(USE_WATCHDOG) + #include "watchdog.h" +#endif + //=========================================================================== //================================== macros ================================= //=========================================================================== @@ -819,8 +821,11 @@ static void updateTemperaturesFromRawValues() { #if HAS_FILAMENT_SENSOR filament_width_meas = analog2widthFil(); #endif - //Reset the watchdog after we know we have a temperature measurement. - watchdog_reset(); + + #if ENABLED(USE_WATCHDOG) + // Reset the watchdog after we know we have a temperature measurement. + watchdog_reset(); + #endif CRITICAL_SECTION_START; temp_meas_ready = false; diff --git a/Marlin/watchdog.cpp b/Marlin/watchdog.cpp index c30cb54c58..e763279716 100644 --- a/Marlin/watchdog.cpp +++ b/Marlin/watchdog.cpp @@ -1,25 +1,14 @@ #include "Marlin.h" #if ENABLED(USE_WATCHDOG) -#include #include "watchdog.h" -#include "ultralcd.h" -//=========================================================================== -//============================ private variables ============================ -//=========================================================================== - -//=========================================================================== -//================================ functions ================================ -//=========================================================================== - - -/// intialise watch dog with a 4 sec interrupt time +// Initialize watchdog with a 4 sec interrupt time void watchdog_init() { #if ENABLED(WATCHDOG_RESET_MANUAL) - //We enable the watchdog timer, but only for the interrupt. - //Take care, as this requires the correct order of operation, with interrupts disabled. See the datasheet of any AVR chip for details. + // We enable the watchdog timer, but only for the interrupt. + // Take care, as this requires the correct order of operation, with interrupts disabled. See the datasheet of any AVR chip for details. wdt_reset(); _WD_CONTROL_REG = _BV(_WD_CHANGE_BIT) | _BV(WDE); _WD_CONTROL_REG = _BV(WDIE) | WDTO_4S; @@ -28,23 +17,18 @@ void watchdog_init() { #endif } -/// reset watchdog. MUST be called every 1s after init or avr will reset. -void watchdog_reset() { - wdt_reset(); -} - //=========================================================================== //=================================== ISR =================================== //=========================================================================== -//Watchdog timer interrupt, called if main program blocks >1sec and manual reset is enabled. +// Watchdog timer interrupt, called if main program blocks >1sec and manual reset is enabled. #if ENABLED(WATCHDOG_RESET_MANUAL) -ISR(WDT_vect) { - SERIAL_ERROR_START; - SERIAL_ERRORLNPGM("Something is wrong, please turn off the printer."); - kill(PSTR("ERR:Please Reset")); //kill blocks //16 characters so it fits on a 16x2 display - while (1); //wait for user or serial reset -} -#endif//RESET_MANUAL - -#endif//USE_WATCHDOG + ISR(WDT_vect) { + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Something is wrong, please turn off the printer."); + kill(PSTR("ERR:Please Reset")); //kill blocks //16 characters so it fits on a 16x2 display + while (1); //wait for user or serial reset + } +#endif //WATCHDOG_RESET_MANUAL + +#endif //USE_WATCHDOG diff --git a/Marlin/watchdog.h b/Marlin/watchdog.h index 6416f13dec..c8a671fe80 100644 --- a/Marlin/watchdog.h +++ b/Marlin/watchdog.h @@ -2,16 +2,13 @@ #define WATCHDOG_H #include "Marlin.h" +#include -#if ENABLED(USE_WATCHDOG) - // initialize watch dog with a 1 sec interrupt time - void watchdog_init(); - // pad the dog/reset watchdog. MUST be called at least every second after the first watchdog_init or AVR will go into emergency procedures.. - void watchdog_reset(); -#else - //If we do not have a watchdog, then we can have empty functions which are optimized away. - FORCE_INLINE void watchdog_init() {}; - FORCE_INLINE void watchdog_reset() {}; -#endif +// Initialize watchdog with a 4 second interrupt time +void watchdog_init(); + +// Reset watchdog. MUST be called at least every 4 seconds after the +// first watchdog_init or AVR will go into emergency procedures. +inline void watchdog_reset() { wdt_reset(); } #endif