一、CmBacktrace特性
CmBacktrace 是一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位,错误原因自动分析的开源库。
故障(Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault)
CmBacktrace 源码下载地址:https://github.com/armink/CmBacktrace
二、移植步骤
从下载的源码中将cm_backtrace文件夹复制到已有的工程目录下,在Keil工程中添加cmbacktrace目录,并将cm_backtrace.c和cmb_fault.S添加到cmbacktrace目录线下;记住要勾选C99模式。
上述操作完成后执行编译会报错,此时需要修改cmb_cfg.h文件内的相关配置,修改后的配置如下:
再次编译还产生一个error,这是因为cmb_fault.c与.S中的HardFault_Handler函数重定义了,此时将context_rvds.S修改如下:
上述修改全部完成后编译OK。
编译OK后,将CmBacktrace源码目录下的tools文件夹的addr2line.exe工具拷贝到工程的可执行文件所在目录下。
三、代码测试
cmbacktrace初始化:
上图红色框中的字符串为工程可执行文件名;
下面编写一个测试函数进行测试:
运行代码后程序发生崩溃,打印串口输出如下:
进入到工程的可执行文件所在目录,按住键盘Shift+鼠标右键,打开Powershell窗口;
复制串口输出窗口的红色框内容,粘贴到Powershell的命令行中(注意win10系统要在命令行先输入.\),然后回车。
从命令行输出Log可以看出,是fault_test_by_div0这个函数发生了错误,并且错误出现在bll_4gcat1.c第653行。
通过以上方法可以发现,使用CmBacktrace 库能帮助我们有效、快速地定位到HardFault之类的错误,提高代码开发效率。