浏览代码

bad ISR catch

Voinea Dragos 2 年之前
父节点
当前提交
8e667a8acd
共有 2 个文件被更改,包括 16 次插入0 次删除
  1. 15 0
      Firmware/Marlin_main.cpp
  2. 1 0
      Firmware/xflash_dump.h

+ 15 - 0
Firmware/Marlin_main.cpp

@@ -1727,6 +1727,21 @@ ISR(WDT_vect)
 }
 #endif
 
+#if defined(WATCHDOG) && defined(EMERGENCY_HANDLERS)
+ISR(BADISR_vect)
+{
+    WRITE(BEEPER, HIGH);
+    eeprom_update_byte((uint8_t*)EEPROM_FW_CRASH_FLAG, (uint8_t)dump_crash_reason::bad_isr);
+#ifdef EMERGENCY_DUMP
+    xfdump_full_dump_and_reset(dump_crash_reason::bad_isr);
+#elif defined(EMERGENCY_SERIAL_DUMP)
+    if(emergency_serial_dump)
+        serial_dump_and_reset(dump_crash_reason::bad_isr);
+#endif
+    softReset();
+}
+#endif
+
 
 void stack_error() {
     WRITE(BEEPER, HIGH);

+ 1 - 0
Firmware/xflash_dump.h

@@ -7,6 +7,7 @@ enum class dump_crash_reason : uint8_t
     manual = 0,
     stack_error,
     watchdog,
+    bad_isr,
 };
 
 #ifdef XFLASH_DUMP