diff --git a/include/fatal.h b/include/fatal.h index e1b5d85586a..35bc71c10bb 100644 --- a/include/fatal.h +++ b/include/fatal.h @@ -31,6 +31,16 @@ enum k_fatal_error_reason { */ }; +/** + * @brief Halt the system on a fatal error + * + * Invokes architecture-specific code to power off or halt the system in + * a low power state. Lacking that, lock interupts and sit in an idle loop. + * + * @param reason Fatal exception reason code + */ +FUNC_NORETURN void k_fatal_halt(unsigned int reason); + /** * @brief Fatal error policy handler * diff --git a/kernel/fatal.c b/kernel/fatal.c index 167a5f63f5b..3ac3f8bc25a 100644 --- a/kernel/fatal.c +++ b/kernel/fatal.c @@ -95,6 +95,11 @@ void z_fatal_print(const char *fmt, ...) } #endif /* CONFIG_LOG || CONFIG_PRINTK */ +FUNC_NORETURN void k_fatal_halt(unsigned int reason) +{ + z_arch_system_halt(reason); +} + void z_fatal_error(unsigned int reason, const z_arch_esf_t *esf) { struct k_thread *thread = k_current_get();