From bc5e4c14dfc1e24879082db7fb05a097c409d513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sat, 22 May 2021 11:59:54 +0200 Subject: [PATCH] Issue #5: Implement startup screen in case apanic happened and prevent the PID controller from starting when a watchdog reset has occured --- .../include/reflow-controller/safety/safety-config.h | 2 +- stm-firmware/main.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/stm-firmware/include/reflow-controller/safety/safety-config.h b/stm-firmware/include/reflow-controller/safety/safety-config.h index 67259dd..551a162 100644 --- a/stm-firmware/include/reflow-controller/safety/safety-config.h +++ b/stm-firmware/include/reflow-controller/safety/safety-config.h @@ -177,7 +177,7 @@ enum analog_value_monitor { ERR_FLAG_WEIGHT_ENTRY(ERR_FLAG_SYSTICK, SAFETY_FLAG_CONFIG_WEIGHT_PANIC), \ /* Watchdog timeout is not handled periodically, but only on startup. * Therefore, it is not listed here */\ - ERR_FLAG_WEIGHT_ENTRY(ERR_FLAG_WTCHDG_FIRED, SAFETY_FLAG_CONFIG_WEIGHT_NONE), \ + ERR_FLAG_WEIGHT_ENTRY(ERR_FLAG_WTCHDG_FIRED, SAFETY_FLAG_CONFIG_WEIGHT_PID), \ ERR_FLAG_WEIGHT_ENTRY(ERR_FLAG_UNCAL, SAFETY_FLAG_CONFIG_WEIGHT_NONE), \ ERR_FLAG_WEIGHT_ENTRY(ERR_FLAG_DEBUG, SAFETY_FLAG_CONFIG_WEIGHT_NONE), \ ERR_FLAG_WEIGHT_ENTRY(ERR_FLAG_TIMING_MAIN_LOOP, SAFETY_FLAG_CONFIG_WEIGHT_PANIC), \ diff --git a/stm-firmware/main.c b/stm-firmware/main.c index 40036c1..c7c1a65 100644 --- a/stm-firmware/main.c +++ b/stm-firmware/main.c @@ -155,6 +155,12 @@ static inline void handle_boot_status(void) res = safety_memory_get_boot_status(&status); if (res != 0) panic_mode(); + + if (status.reset_from_panic) { + /* We've seen a panic */ + gui_root_menu_message_set("!! PANIC !!", "Check error me- mory!"); + } + if (status.reboot_to_bootloader) { status.reboot_to_bootloader = 0UL; safety_memory_set_boot_status(&status); @@ -230,6 +236,7 @@ int main(void) uint64_t quarter_sec_timestamp = 0ULL; static uint64_t IN_SECTION(.ccm.bss) main_loop_iter_count; + /* Setup all the peripherals and external componets like LCD, EEPROM etc. and the safety controller */ setup_system(); /* Try load the calibration. This will only succeed if there's an EEPROM */