From d43a7da20d209dc8bbecfcecdec020c9f510638d Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Fri, 16 Dec 2022 16:01:29 +0100 Subject: [PATCH] fix watchdog not getting disabled on user app boot --- Firmware/Marlin_main.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 63de0a076..0a2b331b6 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -685,17 +685,18 @@ void failstats_reset_print() eeprom_update_byte((uint8_t *)EEPROM_MMU_LOAD_FAIL, 0); } -extern "C" { -void __attribute__ ((naked)) __attribute__ ((section (".init3"))) stopWatchdogOnInit(void) { +void watchdogEarlyDisable(void) { // Regardless if the watchdog support is enabled or not, disable the watchdog very early // after the program starts since there's no danger in doing this. // The reason for this is because old bootloaders might not handle the watchdog timer at all, // leaving it enabled when jumping to the program. This could cause another watchdog reset // during setup() if not handled properly. So to avoid any issue of this kind, stop the // watchdog timer manually. + cli(); + wdt_reset(); + MCUSR &= ~_BV(WDRF); wdt_disable(); } -} void softReset(void) { cli(); @@ -1063,6 +1064,8 @@ static void xflash_err_msg() // are initialized by the main() routine provided by the Arduino framework. void setup() { + watchdogEarlyDisable(); + timer2_init(); // enables functional millis