本帖最后由 sunnydragon 于 2017-4-19 19:17 编辑
CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库
0、CmBacktrace 是什么 CmBacktrace (Cortex Microcontroller Backtrace)是一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位,错误原因自动分析的开源库。主要特性如下: - 支持的错误包括:
- 断言(assert)
- 故障(Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault)
- 故障原因 自动诊断 :可在故障发生时,自动分析出故障的原因,定位发生故障的代码位置,而无需再手动分析繁杂的故障寄存器;
- 输出错误现场的 函数调用栈(需配合 addr2line 工具进行精确定位),还原发生错误时的现场信息,定位问题代码位置、逻辑更加快捷、精准。也可以在正常状态下使用该库,获取当前的函数调用栈;
- 支持 裸机 及以下操作系统平台:
- 根据错误现场状态,输出对应的 线程栈 或 C 主栈;
- 故障诊断信息支持多国语言(目前:简体中文、英文);
- 适配 Cortex-M0/M3/M4/M7 MCU;
- 支持 IAR、KEIL、GCC 编译器;
1、为什么选择 CmBacktrace
入门新人 :对于从 C51 、MSP430 等简单单片机转而使用更加复杂的 ARM 新人来说,时不时出现的 "hard falut" 死机会让新人瞬间懵掉。定位错误的方法也往往是连接上仿真器,一步步 F10/F11 单步,定位到具体的错误代码,再去猜测、排除、推敲错误原因,这种过程十分痛苦。
熟练老手 :慢慢的大家知道可以通过故障寄存器信息来定位故障原因及故障代码地址,虽然这样能解决一小部分问题,但是重复的、繁琐的分析过程也会耽误很多时间。而且对于一些复杂问题,只依靠代码地址是无法解决的,必须得还原错误现场的函数调用逻辑关系。虽然连接仿真器可以查看到的函数调用栈,但故障状态下是无法显示的,所以还是得一步步 F10/F11 单步去定位错误代码的位置。另外,还有两种场景,
- 1、很多产品真机调试时必须断开仿真器
- 2、问题确实存在,但是极难被重现
所以定位这类问题就显得难上加难。
使用本库 :上述所有问题都迎刃而解,可以将错误信息输出到控制台上,还可以将错误信息使用 EasyFlash 的 Log 功能保存至 Flash 中,设备死机后重启依然能够读取上次的错误信息。CmBacktrace 输出的信息包括函数调用栈、故障诊断结果、堆栈、故障寄存器及产品固件信息,极大的提升了错误定位的效率及准确性。
俗话说,工欲善其事,必先利其器。所以有时候做事效率低的原因也许是,你会用的工具种类太少。
合作、贡献 :开源软件的发展离不开大家的支持,欢迎大家多提建议,也希望更多的人一起参与进来,共同提高 。如果觉得这个开源项目很赞,可以点击 项目主页 (Github|OSChina|Coding) 右上角的 Star ,同时把它推荐给更多有需要的朋友。
2、CmBacktrace 如何使用
2.1 演示该演示分如下几个步骤: - 1、制造除零异常(IAR 工程,点击查看源码)
- 2、查看错误诊断信息
- 3、查看函数调用栈基本信息
- 4、通过命令行工具进入项目工程存放可执行文件的路径
- 5、使用 addr2line 命令,查看函数调用栈详细信息,并定位错误代码
[/url]
2.2 Demo目录 | 平台 | 链接 | \demos\non_os\stm32f10x | 裸机 STM32 Cortex-M3 | [url=https://github.com/armink/CmBacktrace/tree/master/demos/non_os/stm32f10x]点击查看 | \demos\os\rtthread\stm32f4xx | RT-Thread STM32 Cortex-M4 | | \demos\os\ucosii\stm32f10x | UCOSII STM32 Cortex-M3 | | \demos\os\freertos\stm32f10x | FreeRTOS STM32 Cortex-M3 | |
更多移植、 API 说明及常见问题说明文档,详见 :https://github.com/armink/CmBacktrace 的 2.3 、 2.4 及 2.5 章节
2.3 许可
采用 MIT 开源协议,细节请阅读项目中的 LICENSE 文件内容。
3、下载
最新版请关注 GitHub :https://github.com/armink/CmBacktrace
本坛:
4、其他
历经半年多的努力 CmBacktrace 终于正式与大家见面,开发在 4 个月前基本都结束了,但迟迟不敢轻易的正式发布。一方面 CmBacktrace 作为很底层的库,同时身兼故障诊断的重任,必须要充分测试,保证其可靠性,再者也想让自己的开源节奏降低些,专注用户的真实需求,培养更多的刚需用户。用户群大了,才能真正体现出开源软件的价值。
最后,要感谢我的老婆,她在家里承担了绝大多数家务以及小孩的教育,这才让我有充足的业余时间去做这些开源软件。
另外,还要感谢我身边那些愿意去试用测试,第一次吃螃蟹的开发者,是他们不停地反馈、交流,才让软件质量和用户体验得到很大的提高。
|