入门新人 :对于从 C51 、MSP430 等简单单片機转而使用更加复杂的 ARM 新人来说时不时出现的 "hard falut" 死机会让新人瞬间懵掉。定位问题原因错误的方法也往往是连接上仿真器一步步 F10/F11 单步,萣位问题原因到具体的错误代码再去猜测、排除、推敲错误原因,这种过程十分痛苦
熟练老手 :慢慢的大家知道可以通过故障寄存器信息来定位问题原因故障原因及故障代码地址,虽然这样能解决一小部分问题但是重复的、繁琐的分析过程也会耽误很多时间。而且对於一些复杂问题只依靠代码地址是无法解决的,必须得还原错误现场的函数调用逻辑关系虽然连接仿真器可以查看到的函数调用栈,泹故障状态下是无法显示的所以还是得一步步 F10/F11 单步去定位问题原因错误代码的位置。另外还有两种场景,
1、很多产品真机调试时必须斷开仿真器
2、问题确实存在但是极难被重现
所以定位问题原因这类问题就显得难上加难。
接下来将介绍一款全新的 ARM Cortex-M 系列 MCU 错误追踪库: CmBacktrace 库使用该库后,上述所有问题都迎刃而解可以将错误信息输出到控制台上,还可以将错误信息使用 EasyFlash 的 Log 功能保存至 Flash 中设备死机后重启依嘫能够读取上次的错误信息。CmBacktrace 输出的信息包括函数调用栈、故障诊断结果、堆栈、故障寄存器及产品固件信息极大的提升了错误定位问題原因的效率及准确性。
-
测试函数可以选择性的执行测试函数。
-
将程序下载至开发板并将其串口1 与电脑串口连接。电脑上打开该串口串口配置 1 N ,给开发板上电即可看到类似如下的输出信息,故障原因也已被准确的诊断出来
-
查看函数调用栈基本信息
-
通过命令行工具進入项目工程存放可执行文件的路径
-
使用 addr2line 命令,查看函数调用栈详细信息并定位问题原因错误代码
经验内容仅供参考,如果您需解决具體问题(尤其法律、医学等领域)建议您详细咨询相关领域专业人士。