入门新人 :对于从 C51 、MSP430 等简单单片机转而使用更加复杂的 ARM 新人来说,时不时出现的 'hard falut' 死机会让新人瞬间懵掉。定位错误的方法也往往是连接上仿真器,一步步 F10/F11 单步,定位到具体的错误代码,再去猜测、排除、推敲错误原因,这种过程十分痛苦。熟练老手 :慢慢的大家知道可以通过故障寄存器信息来定位故障原因及故障代码地址,虽然这样能解决一小部分问题,但是重复的、繁琐的分析过程也会耽误很多时间。而且对于一些复杂问题,只依靠代码地址是无法解决的,必须得还原错误现场的函数调用逻辑关系。虽然连接仿真器可以查看到的函数调用栈,但故障状态下是无法显示的,所以还是得一步步 F10/F11 单步去定位错误代码的位置。另外,还有两种场景,1、很多产品真机调试时必须断开仿真器2、问题确实存在,但是极难被重现所以定位这类问题就显得难上加难。接下来将介绍一款全新的 ARM Cortex-M 系列 MCU 错误追踪库: CmBacktrace 库。使用该库后,上述所有问题都迎刃而解,可以将错误信息输出到控制台上,还可以将错误信息使用 EasyFlash 的 Log 功能保存至 Flash 中,设备死机后重启依然能够读取上次的错误信息。CmBacktrace 输出的信息包括函数调用栈、故障诊断结果、堆栈、故障寄存器及产品固件信息,极大的提升了错误定位的效率及准确性。
工具/原料
1
CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库
2
addr2line 工具
方法/步骤
1
在 GitHub 上搜索并下载最新 CmBacktrace 库。查看 \demos 目录下有没有合适自己的 Demo ,如有类似,则建议直接进行真机测试。
2
找到 Demo 工程,文件夹 RVMDK 下为 Keil 工程,EMARM 下为 IAR 工程。打开工程后,在 app/src/app.c 中有 fault_test_by_unalign() 及 fault_test_by_div0() 两个 HardFault 测试函数,可以选择性的执行测试函数。
3
将程序下载至开发板,并将其串口1 与电脑串口连接。电脑上打开该串口,串口配置 115200 8 1 N ,给开发板上电,即可看到类似如下的输出信息,故障原因也已被准确的诊断出来。
4
查看函数调用栈基本信息
5
通过命令行工具进入项目工程存放可执行文件的路径
6
使用 addr2line 命令,查看函数调用栈详细信息,并定位错误代码
上一篇:syj分析如何提高家居饰品的销量
下一篇:让用户心甘情愿的填写真实资料