From ecbcb2509f4b811bce0a56e07de9737d14815251 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Tue, 24 Nov 2020 15:15:11 -0700 Subject: Add better logging capabilities, including the ability to panic. --- src/kern/panic.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/kern/panic.c (limited to 'src/kern/panic.c') diff --git a/src/kern/panic.c b/src/kern/panic.c new file mode 100644 index 0000000..8708456 --- /dev/null +++ b/src/kern/panic.c @@ -0,0 +1,36 @@ +#include "arch.h" +#include "kern/panic.h" +#include "kern/log.h" +#include "kern/init.h" +#include "arch/stm32l4xxx/peripherals/clock.h" +#include "kern/gpio/sysled.h" +#include "kern/gpio/gpio_manager.h" +#include "kern/delay.h" + +#include + +#ifdef ARCH_STM32L4 +_Noreturn void panic(const char* fmt, ...) +{ + + if (get_system_init_level() > INIT_LEVEL_2) { + va_list l; + va_start(l, fmt); + + kerr_logf("** Kernel Panic! **\n"); + kerr_vlogf(fmt, l); + + set_system_clock_MHz(4); /* reduce power usage while we do nothing. */ + for(;;); + } else { + set_system_clock_MHz(4); /* reduce power usage while we do nothing. */ + gpio_reserved_pin_t pin3 = get_sysled(); + for (;;) { + set_gpio_pin_high(pin3); + delay(100000); + set_gpio_pin_low(pin3); + delay(100000); + } + } +} +#endif -- cgit