一、概叙:
1、开发环境使用的是RT-THREAD STUDIO ,参考了网上一些文档,使用的芯片是STM32H7,针对个人一个小时移植过程的记录。
2、后续使用cmbacktrace持续记录
二、步骤:
1、下载cm-backtrace源码
https://gitee.com/Armink/CmBacktrace
在上述路径下载,如下图所示:
2、将相关文件拷贝到我们的工程目录下
将cm_backtrace文件下的提取以下放到我们工程下,最终如下图所示
3、修改cmb_cfg.h
根据需要修改这个文件
我的修改如下:
#ifndef _CMB_CFG_H_
#define _CMB_CFG_H_
#include <rtthread.h>
/* print line, must config by user */
#define cmb_println(...) rt_kprintf(__VA_ARGS__);rt_kprintf("\r\n")
/* 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
/* cpu platform type, must config by user */
#define CMB_CPU_PLATFORM_TYPE 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_ENGLISH
#endif /* _CMB_CFG_H_ */
4、去掉 gcc_contex.s中的hardfault定义
不去掉会报错,如下图所示:
5、添加头文件到工程
在studio的设置里面添加头文件,注意包含language文件夹
6、代码加入初始化及测试代码
void plt_cmbacktrace_init(void)
{
rt_kprintf("cm_backtrace init\n");
cm_backtrace_init("soft_name","v0.0.1","v0.0.1");
}
void cmb_test_pt(void)
{
// 这里设置SCB->CCR寄存器目的是打开除0异常触发,否则即使除以0也不会触发Hard Fault。
volatile int *SCB_CCR = (volatile int *)0xE000ED14; // SCB->CCR
*SCB_CCR |= (1 << 4); /* bit4: DIV_0_TRP. */
int x, y, z;
x = 10;
y = 0;
z = x / y;
printf("--------------z:%d\n", z);
}
7、编译工程即可
三、调试过程
1、烧写代码到板子,接好串口显示如下打印信息:
2、将tool文件下的addr2line 64位版本的拷贝到bin文件根目录下
3、shift+鼠标右键打开powershell
输入串口提示的命令,需要略作修改:.\addr2line -e ATP_APP.elf -afpiC 0807135a 0807115a
文件名改成你工程生成的文件名,最终结果如下图:
提示结果在740行出错,如下图位实际代码位置:
四、使用结果反馈
该项为后续使用了cmbacktrace效果记录,持续更新。