WDR crash initial
This commit is contained in:
parent
8c3d76f85f
commit
1e786c7f55
@ -1667,6 +1667,9 @@ void setup()
|
|||||||
KEEPALIVE_STATE(NOT_BUSY);
|
KEEPALIVE_STATE(NOT_BUSY);
|
||||||
#ifdef WATCHDOG
|
#ifdef WATCHDOG
|
||||||
wdt_enable(WDTO_4S);
|
wdt_enable(WDTO_4S);
|
||||||
|
#ifdef XFLASH_DUMP
|
||||||
|
WDTCSR |= (1 << WDIE);
|
||||||
|
#endif //XFLASH_DUMP
|
||||||
#endif //WATCHDOG
|
#endif //WATCHDOG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1811,6 +1811,12 @@ static void lcd_dump_memory()
|
|||||||
xfdump_dump();
|
xfdump_dump();
|
||||||
lcd_return_to_status();
|
lcd_return_to_status();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void lcd_wdr_crash()
|
||||||
|
{
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -2007,6 +2013,7 @@ static void lcd_support_menu()
|
|||||||
|
|
||||||
#ifdef MENU_DUMP
|
#ifdef MENU_DUMP
|
||||||
MENU_ITEM_FUNCTION_P(_i("Dump memory"), lcd_dump_memory);
|
MENU_ITEM_FUNCTION_P(_i("Dump memory"), lcd_dump_memory);
|
||||||
|
MENU_ITEM_FUNCTION_P(PSTR("WDR crash"), lcd_wdr_crash);
|
||||||
#endif
|
#endif
|
||||||
#ifdef DEBUG_BUILD
|
#ifdef DEBUG_BUILD
|
||||||
MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug);////MSG_DEBUG c=18
|
MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug);////MSG_DEBUG c=18
|
||||||
@ -6704,7 +6711,7 @@ static void lcd_main_menu()
|
|||||||
void stack_error() {
|
void stack_error() {
|
||||||
WRITE(BEEPER, HIGH);
|
WRITE(BEEPER, HIGH);
|
||||||
eeprom_update_byte((uint8_t*)EEPROM_CRASH_ACKNOWLEDGED, 0);
|
eeprom_update_byte((uint8_t*)EEPROM_CRASH_ACKNOWLEDGED, 0);
|
||||||
xfdump_full_dump_and_reset(true);
|
xfdump_full_dump_and_reset(dump_crash_source::stack_error);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void stack_error() {
|
void stack_error() {
|
||||||
|
@ -6,6 +6,14 @@
|
|||||||
#include "xflash_dump.h"
|
#include "xflash_dump.h"
|
||||||
#ifdef XFLASH_DUMP
|
#ifdef XFLASH_DUMP
|
||||||
#include "xflash.h"
|
#include "xflash.h"
|
||||||
|
#include "Marlin.h"
|
||||||
|
|
||||||
|
ISR(WDT_vect)
|
||||||
|
{
|
||||||
|
WRITE(BEEPER, 1);
|
||||||
|
eeprom_update_byte((uint8_t*)EEPROM_CRASH_ACKNOWLEDGED, 0);
|
||||||
|
xfdump_full_dump_and_reset(dump_crash_source::watchdog);
|
||||||
|
}
|
||||||
|
|
||||||
bool xfdump_check_state()
|
bool xfdump_check_state()
|
||||||
{
|
{
|
||||||
@ -25,10 +33,10 @@ bool xfdump_check_crash()
|
|||||||
if(!xfdump_check_state())
|
if(!xfdump_check_state())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint8_t crash;
|
dump_crash_source crash;
|
||||||
xflash_rd_data(DUMP_OFFSET + offsetof(dump_t, header.crash),
|
xflash_rd_data(DUMP_OFFSET + offsetof(dump_t, header.crash_type),
|
||||||
(uint8_t*)&crash, sizeof(crash));
|
(uint8_t*)&crash, sizeof(crash));
|
||||||
return crash;
|
return (crash != dump_crash_source::manual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -79,7 +87,7 @@ void xfdump_dump()
|
|||||||
dump_header_t buf;
|
dump_header_t buf;
|
||||||
buf.magic = DUMP_MAGIC;
|
buf.magic = DUMP_MAGIC;
|
||||||
buf.regs_present = false;
|
buf.regs_present = false;
|
||||||
buf.crash = false;
|
buf.crash_type = (uint8_t)dump_crash_source::manual;
|
||||||
|
|
||||||
// write sram only
|
// write sram only
|
||||||
xfdump_dump_core(buf, DUMP_OFFSET + offsetof(dump_t, data.sram),
|
xfdump_dump_core(buf, DUMP_OFFSET + offsetof(dump_t, data.sram),
|
||||||
@ -87,12 +95,12 @@ void xfdump_dump()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void xfdump_full_dump_and_reset(bool crash)
|
void xfdump_full_dump_and_reset(dump_crash_source crash)
|
||||||
{
|
{
|
||||||
dump_header_t buf;
|
dump_header_t buf;
|
||||||
buf.magic = DUMP_MAGIC;
|
buf.magic = DUMP_MAGIC;
|
||||||
buf.regs_present = true;
|
buf.regs_present = true;
|
||||||
buf.crash = crash;
|
buf.crash_type = (uint8_t)crash;
|
||||||
|
|
||||||
// disable interrupts for a cleaner register dump
|
// disable interrupts for a cleaner register dump
|
||||||
cli();
|
cli();
|
||||||
@ -101,7 +109,6 @@ void xfdump_full_dump_and_reset(bool crash)
|
|||||||
xfdump_dump_core(buf, DUMP_OFFSET + offsetof(dump_t, data), 0, RAMEND);
|
xfdump_dump_core(buf, DUMP_OFFSET + offsetof(dump_t, data), 0, RAMEND);
|
||||||
|
|
||||||
// force a reset soon
|
// force a reset soon
|
||||||
wdt_enable(0);
|
softReset();
|
||||||
while(true);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -8,7 +8,14 @@ bool xfdump_check_state(); // return true if a dump is present
|
|||||||
bool xfdump_check_crash(); // return true if a dump is present and is a crash dump
|
bool xfdump_check_crash(); // return true if a dump is present and is a crash dump
|
||||||
void xfdump_dump(); // create a new SRAM memory dump
|
void xfdump_dump(); // create a new SRAM memory dump
|
||||||
|
|
||||||
|
enum class dump_crash_source : uint8_t
|
||||||
|
{
|
||||||
|
manual = 0,
|
||||||
|
stack_error,
|
||||||
|
watchdog,
|
||||||
|
};
|
||||||
|
|
||||||
// create a new dump containing registers and SRAM, then reset
|
// create a new dump containing registers and SRAM, then reset
|
||||||
void xfdump_full_dump_and_reset(bool crash = false);
|
void xfdump_full_dump_and_reset(dump_crash_source crash = dump_crash_source::manual);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,7 +20,7 @@ struct dump_header_t
|
|||||||
uint32_t magic;
|
uint32_t magic;
|
||||||
|
|
||||||
uint8_t regs_present; // true when the lower segment containing registers is present
|
uint8_t regs_present; // true when the lower segment containing registers is present
|
||||||
uint8_t crash; // true if triggered by EMERGENCY_DUMP
|
uint8_t crash_type; // uses values from dump_crash_source
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dump_data_t
|
struct dump_data_t
|
||||||
|
@ -163,6 +163,9 @@ void xyzcal_meassure_leave(void)
|
|||||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||||
#ifdef WATCHDOG
|
#ifdef WATCHDOG
|
||||||
wdt_enable(WDTO_4S);
|
wdt_enable(WDTO_4S);
|
||||||
|
#ifdef XFLASH_DUMP
|
||||||
|
WDTCSR |= (1 << WDIE);
|
||||||
|
#endif //XFLASH_DUMP
|
||||||
#endif //WATCHDOG
|
#endif //WATCHDOG
|
||||||
sm4_stop_cb = 0;
|
sm4_stop_cb = 0;
|
||||||
sm4_update_pos_cb = 0;
|
sm4_update_pos_cb = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user