FreeRTOS-移植Cmbacktrace

防丢转载

1. 下载Cmbacktrace

Cmbacktrace的github目录为:https://github.com/armink/CmBacktrace

下载到本地会得到如下目录的文件

在demo/os/freertos下会有移植好的实例可以参考

2. 在工程中添加对应的目录

cmbacetrace.c在cm_backtrace下,cmb_fault在CmBacktrace-master\cm_backtrace\fault_handler\keil下

添加对应头文件目录的包含

3. 进行配置

main函数:
#include"cm_backtrace.h"
/// main 函数中添加 初始化
cm_backtrace_init("CmBacktrace", "V1.0.0", "V1.0.0");
cmb_cfg 示例
/* print line, must config by user */
#define cmb_println(...)     printf(__VA_ARGS__);printf("\r\n")          /* 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_FREERTOS //    CMB_OS_PLATFORM_RTT or CMB_OS_PLATFORM_UCOSII or CMB_OS_PLATFORM_UCOSIII or CMB_OS_PLATFORM_FREERTOS or CMB_OS_PLATFORM_RTX5 */
/* cpu platform type, must config by user */
#define CMB_CPU_PLATFORM_TYPE    CMB_CPU_ARM_CORTEX_M7      /* CMB_CPU_ARM_CORTEX_M0 or CMB_CPU_ARM_CORTEX_M3 or CMB_CPU_ARM_CORTEX_M4 or CMB_CPU_ARM_CORTEX_M7 */
/* enable dump stack information */
#define CMB_USING_DUMP_STACK_INFO 
/* language of print information */
#define CMB_PRINT_LANGUAGE        CMB_PRINT_LANGUAGE_CHINESE /// CMB_PRINT_LANGUAGE_CHINESE_UTF8 //CMB_PRINT_LANGUAGE_CHINESE_UTF8 // CMB_PRINT_LANGUAGE_CHINESE//   CMB_PRINT_LANGUAGE_ENGLISH  // CMB_PRINT_LANGUAGE_CHINESE 
#endif /* _CMB_CFG_H_ */
task.c

结尾添加如下函数

/*< Support For CmBacktrace >*/
uint32_t * vTaskStackAddr()
{
    return pxCurrentTCB->pxStack;
}

uint32_t vTaskStackSize()
{
    #if ( portSTACK_GROWTH > 0 )
    
    return (pxNewTCB->pxEndOfStack - pxNewTCB->pxStack + 1);
    
    #else /* ( portSTACK_GROWTH > 0 )*/
    
    return pxCurrentTCB->uxSizeOfStack;
    
    #endif /* ( portSTACK_GROWTH > 0 )*/
}

char * vTaskName()
{
    return pxCurrentTCB->pcTaskName;
}

这时候时候会显示没有pxCurrentTCB->uxSizeOfStack

需要在 typedef struct tskTaskControlBlock中添加

#if( portSTACK_GROWTH <= 0)
UBaseType_t     uxSizeOfStack;      /*< Support For CmBacktrace >*/
#endif

在static void prvInitialiseNewTask函数第一行中添加

pxNewTCB->uxSizeOfStack = ulStackDepth;   /*< Support For CmBacktrace >*/
FreeRTOS.h

typedef struct xSTATIC_TCB中添加

#if(portSTACK_GROWTH <= 0)
        UBaseType_t     uxSizeOfStack;      /*< Support For CmBacktrace >*/
#endif/* ( portSTACK_GROWTH > 0 )*/
修改void HardFault_Handler(void)

如果之前自定义过void HardFault_Handler(void)函数,此时可以将自定义的void HardFault_Handler(void)函数注释掉,由 cm_backtrace 接管。

4. 验证

加上打印串口后可以使用人工制造一个除零错误等实验一下。错误的实例在demo中可以找到

使用附带的addr2line 工具可以将打印出的错误地址转换为文件行,定位到是哪个位置出错。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值