diff --git a/stm-firmware/safety/fault.c b/stm-firmware/safety/fault.c index 37fe8f6..d8f97a8 100644 --- a/stm-firmware/safety/fault.c +++ b/stm-firmware/safety/fault.c @@ -26,14 +26,16 @@ void HardFault_Handler(void) { - /* This is a non recoverable fault. Hang here */ + /* This is a non recoverable fault. Stop the oven */ oven_driver_set_power(0); oven_driver_apply_power_level(); + /* Set the error led */ led_set(0, 1); - while (1); + /* Try the real panic mode */ + panic_mode(); } /* Overwrite default handler. Go to panic mode */ @@ -44,12 +46,9 @@ void __int_default_handler(void) void panic_mode(void) { + /* This variable is static, because I don't want it to be on the stack */ static struct safety_memory_boot_status IN_SECTION(.ccm.bss) boot_status; - /* Panic mode is esentially the same as a hardfault, - * but it can be expected, that more functionality is still usable - */ - oven_driver_set_power(0); oven_driver_apply_power_level(); @@ -59,6 +58,6 @@ void panic_mode(void) (void)safety_memory_set_boot_status(&boot_status); } - + /* Let the watchdog do the rest */ while (1); }