CmBacktrace的cmb_cfg.h
一:宏定义解析
#ifndef _CMB_CFG_H_
#define _CMB_CFG_H_
#ifdef CMB_USER_CFG
#include "cmb_user_cfg.h"
#else
/* print line, must config by user */
#define cmb_println(...) /* e.g., printf(__VA_ARGS__);printf("\r\n") or SEGGER_RTT_printf(0, __VA_ARGS__);SEGGER_RTT_WriteString(0, "\r\n") */
/* enable bare metal(no OS) platform */
/* #define CMB_USING_BARE_METAL_PLATFORM */
/* enable OS platform */
/* #define CMB_USING_OS_PLATFORM */
/* OS platform type, must config when CMB_USING_OS_PLATFORM is enable */
/* #define CMB_OS_PLATFORM_TYPE CMB_OS_PLATFORM_RTT or CMB_OS_PLATFORM_UCOSII or CMB_OS_PLATFORM_UCOSIII or CMB_OS_PLATFORM_FREERTOS or CMB_OS_PLATFORM_RTX5 or CMB_OS_PLATFORM_THREADX */
/* cpu platform type, must config by user */
#define CMB_CPU_PLATFORM_TYPE /* CMB_CPU_ARM_CORTEX_M0 or CMB_CPU_ARM_CORTEX_M3 or CMB_CPU_ARM_CORTEX_M4 or CMB_CPU_ARM_CORTEX_M7 or CMB_CPU_ARM_CORTEX_M33 */
/* enable dump stack information */
/* #define CMB_USING_DUMP_STACK_INFO */
/* language of print information */
/* #define CMB_PRINT_LANGUAGE CMB_PRINT_LANGUAGE_ENGLISH(default) or CMB_PRINT_LANGUAGE_CHINESE or CMB_PRINT_LANGUAGE_CHINESE_UTF8 */
#endif
#endif /* _CMB_CFG_H_ */
文件背景
库名称:CmBacktrace(Cortex Microcontroller Backtrace Library)
功能:用于嵌入式系统(尤其是 ARM Cortex-M 系列 MCU)的故障诊断和堆栈回溯。
版权与协议:遵循 MIT 许可证,允许自由使用和修改。
核心配置项分析
1. 打印输出配置 (cmb_println)
#define cmb_println(...) /* 用户需自定义,如使用 printf 或 SEGGER_RTT */
作用:定义调试信息的输出方式。
用户需实现:根据硬件平台选择打印函数(如串口、RTT、UART等)。
示例:
#define cmb_println(...) printf(__VA_ARGS__); printf("\r\n")
2. 平台类型选择
裸机平台(无操作系统):
// #define CMB_USING_BARE_METAL_PLATFORM
OS 平台(需操作系统支持):
// #define CMB_USING_OS_PLATFORM
#define CMB_OS_PLATFORM_TYPE CMB_OS_PLATFORM_FREERTOS // 示例
支持的 OS 类型:
RT-Thread (RTT)
μC/OS-II、μC/OS-III
FreeRTOS、RTX5、ThreadX
3. CPU 平台配置
#define CMB_CPU_PLATFORM_TYPE CMB_CPU_ARM_CORTEX_M4 // 示例
支持的 CPU:ARM Cortex-M0/M3/M4/M7/M33。
重要性:直接影响堆栈解析和异常处理逻辑,必须正确配置。
4. 堆栈信息转储
// #define CMB_USING_DUMP_STACK_INFO
作用:发生故障时打印堆栈内容,辅助定位崩溃点。
代价:可能增加代码体积,需权衡调试需求与资源限制。
5. 输出语言选择
// #define CMB_PRINT_LANGUAGE CMB_PRINT_LANGUAGE_ENGLISH // 默认英文
选项:英文、简体中文、UTF-8 中文。
应用场景:根据开发团队习惯选择语言,提高日志可读性。
配置逻辑
用户自定义覆盖:
#ifdef CMB_USER_CFG
#include "cmb_user_cfg.h"
#else
/* 默认配置 */
#endif
用户可创建 cmb_user_cfg.h 覆盖默认配置,避免直接修改库文件。
典型配置示例
// cmb_user_cfg.h 示例
#define cmb_println(...) SEGGER_RTT_printf(0, __VA_ARGS__); SEGGER_RTT_WriteString(0, "\r\n")
#define CMB_USING_OS_PLATFORM
#define CMB_OS_PLATFORM_TYPE CMB_OS_PLATFORM_FREERTOS
#define CMB_CPU_PLATFORM_TYPE CMB_CPU_ARM_CORTEX_M4
#define CMB_USING_DUMP_STACK_INFO
#define CMB_PRINT_LANGUAGE CMB_PRINT_LANGUAGE_CHINESE_UTF8
常见问题与建议
编译错误:未定义 CMB_CPU_PLATFORM_TYPE
解决:根据 MCU 型号正确配置(如 CMB_CPU_ARM_CORTEX_M4)。
无调试输出:未实现 cmb_println
解决:实现具体的打印函数,确保硬件初始化(如串口)。
堆栈解析失败:未启用 CMB_USING_DUMP_STACK_INFO 或 CPU 类型配置错误。
解决:检查配置并确认堆栈指针对齐。
OS 支持缺失:在 RTOS 中崩溃信息不完整。
解决:启用 CMB_USING_OS_PLATFORM 并正确设置 OS 类型。
总结
核心目标:通过合理配置,使 CmBacktrace 库适配目标硬件和操作系统,实现故障诊断功能。
关键配置:
打印输出适配硬件。
CPU 和 OS 类型的正确声明。
按需启用堆栈转储和语言支持。
调试建议:结合 HardFault 异常处理,利用库输出的信息分析崩溃原因(如非法内存访问、栈溢出)。
通过此配置文件,开发者可以灵活地将 CmBacktrace 集成到不同嵌入式平台中,显著提升系统调试效率。