当前位置: 首页 > article >正文

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 集成到不同嵌入式平台中,显著提升系统调试效率。


http://www.kler.cn/a/587945.html

相关文章:

  • java学习总结(五)MyBatis动态sql
  • 让 Deepseek 写一个计算器(网页)
  • SQL Server性能分析利器:SET STATISTICS TIME ON 详解与实战案例
  • Python数据结构 ——字符串
  • Go语言os标准库
  • 中考英语之09从句
  • Dubbo 服务发现
  • 从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一 从打光到材质 细嚼慢咽逐条读代码系列
  • Oracle Database 11g、12c、18c、19c、21c、22c 与 23AI 各版本差异、优缺点详解
  • 结构体定义与应用
  • C++特性——智能指针
  • 基于SpringBoot3+Druid数据库连接池与外部PostgreSQL的Kubernetes Pod YAML全解析
  • Java集合 - HashMap
  • 自动化测试脚本
  • Hive SQL 精进系列:PERCENTILE_APPROX 搞定分位数
  • 电磁兼容|RC电路
  • Hooka:多功能 Shellcode 加载器生成工具详解
  • harmonyOS NEXT开发与前端开发深度对比分析
  • 【linux篇】--linux常见指令
  • MyBatis SqlSessionFactoryBuilder 的作用是什么?