Add test code for the stack overflow handler

This commit is contained in:
Yuri D'Elia 2021-06-15 18:49:20 +02:00
parent a614268c94
commit e6d520cf6e

View File

@ -1820,13 +1820,40 @@ static void lcd_serial_dump()
}
#endif //MENU_SERIAL_DUMP
#if defined(WATCHDOG) && defined(DEBUG_BUILD) && defined(EMERGENCY_HANDLERS)
#defined(DEBUG_BUILD) && defined(EMERGENCY_HANDLERS)
#include <avr/wdt.h>
#ifdef WATCHDOG
static void lcd_wdr_crash()
{
while (1);
}
#endif
static uint8_t lcd_stack_crash_(uint8_t arg, uint32_t sp = 0)
{
// populate the stack with an increasing value for ease of testing
volatile uint16_t tmp __attribute__((unused)) = sp;
_delay(arg);
uint8_t ret = lcd_stack_crash_(arg, SP);
// required to avoid tail call elimination and to slow down the stack growth
_delay(ret);
return ret;
}
static void lcd_stack_crash()
{
#ifdef WATCHDOG
wdt_disable();
#endif
// delay choosen in order to hit the stack-check in the temperature isr reliably
lcd_stack_crash_(10);
}
#endif
//! @brief Show Support Menu
//!
@ -2027,9 +2054,12 @@ static void lcd_support_menu()
MENU_ITEM_FUNCTION_P(_i("Dump to serial"), lcd_serial_dump);
#endif
#ifdef DEBUG_BUILD
#if defined(WATCHDOG) && defined(EMERGENCY_HANDLERS)
#ifdef EMERGENCY_HANDLERS
#ifdef WATCHDOG
MENU_ITEM_FUNCTION_P(PSTR("WDR crash"), lcd_wdr_crash);
#endif
#endif //WATCHDOG
MENU_ITEM_FUNCTION_P(PSTR("Stack crash"), lcd_stack_crash);
#endif //EMERGENCY_HANDLERS
MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug);////MSG_DEBUG c=18
#endif /* DEBUG_BUILD */