From fd92963b268e68c375ab8d8f1543b1f422f6c221 Mon Sep 17 00:00:00 2001 From: wdfk-prog <1425075683@qq.com> Date: Thu, 30 Oct 2025 17:02:35 +0800 Subject: [PATCH] feat(CmBacktrace): enhance reliability, configurability, and testability --- cmb_cfg.h | 2 +- cmb_flash_log.c | 22 +++++++++++++++------- cmb_port.c | 18 ++++++++++++++++-- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/cmb_cfg.h b/cmb_cfg.h index e4dbd28..7fff414 100644 --- a/cmb_cfg.h +++ b/cmb_cfg.h @@ -42,7 +42,7 @@ extern void cmb_flash_log_println(const char *fmt, ...); #else #include #define CMB_LOG_TAG "cmb" -#define cmb_println(...) ulog_e(CMB_LOG_TAG, __VA_ARGS__);ulog_flush() +#define cmb_println(...) ulog_e(CMB_LOG_TAG, __VA_ARGS__);ulog_emergency_flush() #endif /* RT_USING_ULOG */ /* enable bare metal(no OS) platform */ diff --git a/cmb_flash_log.c b/cmb_flash_log.c index bbc9cca..3e7b478 100644 --- a/cmb_flash_log.c +++ b/cmb_flash_log.c @@ -16,17 +16,23 @@ #include #include -//#define CMB_USING_FAL_FLASH_LOG -//#define CMB_USING_FAL_BACKUP_LOG_TO_FILE - #if defined(CMB_USING_FAL_FLASH_LOG) +#include + +#if RT_VER_NUM < 0x40100 +#include #if !defined(PKG_USING_FAL) || !defined(RT_USING_DFS) #error "please enable the FAL package and DFS component" #endif +#else +#if !defined(RT_USING_FAL) || !defined(RT_USING_DFS) +#error "please enable the FAL package and DFS component" +#endif +#include +#include +#endif /* RT_VER_NUM check */ -#include -#include #ifndef CMB_FAL_FLASH_LOG_PART #define CMB_FAL_FLASH_LOG_PART "cmb_log" @@ -109,9 +115,11 @@ int ulog_cmb_flash_log_backend_init(void) ulog_backend_register(&backend, "cmb_flash_log", RT_FALSE); + backend.is_emergency_backend = RT_TRUE; + return 0; } -INIT_APP_EXPORT(ulog_cmb_flash_log_backend_init); +INIT_FS_EXPORT(ulog_cmb_flash_log_backend_init); #else void cmb_flash_log_println(const char *fmt, ...) @@ -200,7 +208,7 @@ int cmb_backup_flash_log_to_file(void) return 0; } -INIT_APP_EXPORT(cmb_backup_flash_log_to_file); +INIT_FS_EXPORT(cmb_backup_flash_log_to_file); #endif /* CMB_USING_FAL_BACKUP_LOG_TO_FILE */ #endif /* defined(CMB_USING_FLASH_LOG_BACKUP) */ diff --git a/cmb_port.c b/cmb_port.c index b780745..1434176 100644 --- a/cmb_port.c +++ b/cmb_port.c @@ -30,6 +30,18 @@ #include #include +#ifndef CMBACKTRACE_FIRMWARE_NAME +#define CMBACKTRACE_FIRMWARE_NAME "rt-thread" +#endif // !CMBACKTRACE_FIRMWARE_NAME + +#ifndef CMBACKTRACE_HARDWARE_VER +#define CMBACKTRACE_HARDWARE_VER "1.0" +#endif // !CMBACKTRACE_HARDWARE_VER + +#ifndef CMBACKTRACE_SOFTWARE_VER +#define CMBACKTRACE_SOFTWARE_VER "1.0" +#endif // !CMBACKTRACE_SOFTWARE_VER + #if defined(__CC_ARM) #pragma O1 #elif defined(__CLANG_ARM) @@ -282,8 +294,8 @@ int rt_cm_backtrace_init(void) { return 0; } - cm_backtrace_init("rt-thread","1.0","1.0"); - + cm_backtrace_init(CMBACKTRACE_FIRMWARE_NAME, CMBACKTRACE_HARDWARE_VER, CMBACKTRACE_SOFTWARE_VER); + rt_hw_exception_install(exception_hook); rt_assert_set_hook(assert_hook); @@ -293,6 +305,7 @@ int rt_cm_backtrace_init(void) { } INIT_DEVICE_EXPORT(rt_cm_backtrace_init); +#if defined(RT_USING_FINSH) && defined(PKG_CMBACKTRACE_ENABLE_TEST) long cmb_test(int argc, char **argv) { volatile int * SCB_CCR = (volatile int *) 0xE000ED14; // SCB->CCR int x, y, z; @@ -340,3 +353,4 @@ long cmb_test(int argc, char **argv) { return 0; } MSH_CMD_EXPORT(cmb_test, cm_backtrace_test: cmb_test ); +#endif /* defined(RT_USING_FINSH) && defined(PKG_CMBACKTRACE_ENABLE_TEST) */