打印
[开发工具]

【开源】ARM Cortex-M 错误追踪库,专治各种 HardFault

[复制链接]
3984|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
armink|  楼主 | 2017-4-25 08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 armink 于 2017-4-25 08:52 编辑

CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库
0、CmBacktrace 是什么
CmBacktraceCortex Microcontroller Backtrace)是一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位,错误原因自动分析的开源库。主要特性如下:
  • 支持的错误包括:
    • 断言(assert)
    • 故障(Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault)

  • 故障原因 自动诊断 :可在故障发生时,自动分析出故障的原因,定位发生故障的代码位置,而无需再手动分析繁杂的故障寄存器;
  • 输出错误现场的 函数调用栈(需配合 addr2line 工具进行精确定位),还原发生错误时的现场信息,定位问题代码位置、逻辑更加快捷、精准。也可以在正常状态下使用该库,获取当前的函数调用栈;
  • 支持 裸机 及以下操作系统平台:
    • RT-Thread
    • UCOS
    • FreeRTOS

  • 根据错误现场状态,输出对应的 线程栈 或 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.com/armink/CmBacktrace) 右上角的 Star ,同时把它推荐给更多有需要的朋友。
2、CmBacktrace 如何使用
2.1 演示
该演示分如下几个步骤:
  • 1、制造除零异常(IAR 工程, github.com/armink/CmBacktrace/tree/master/demos/non_os/stm32f10x
  • 2、查看错误诊断信息
  • 3、查看函数调用栈基本信息
  • 4、通过命令行工具进入项目工程存放可执行文件的路径
  • 5、使用 addr2line 命令,查看函数调用栈详细信息,并定位错误代码

2.2 Demo
目录
平台
链接
\demos\non_os\stm32f10x
裸机 STM32 Cortex-M3
点击查看
\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 说明及常见问题说明文档,详见 : github.com/armink/CmBacktrace  的 2.3 、 2.4 及 2.5 章节

3、下载

最新版请关注 GitHub: github.com/armink/CmBacktrace
本坛下载: CmBacktrace-0.2.0.zip (1.87 MB)
沙发
aozima| | 2017-4-25 10:16 | 只看该作者
前排膜拜!

使用特权

评论回复
板凳
Xflyan| | 2017-4-25 10:25 | 只看该作者
查错神器?!看看

使用特权

评论回复
地板
yearnext| | 2017-4-25 10:25 | 只看该作者
已关注

使用特权

评论回复
5
mmuuss586| | 2017-4-25 12:43 | 只看该作者

谢谢分享;

使用特权

评论回复
6
armink|  楼主 | 2017-4-25 20:25 | 只看该作者

吴兄,CmBacktrace 优先支持了 RT-Thread 平台,欢迎试用哈。

使用特权

评论回复
7
yklstudent| | 2017-4-25 22:22 | 只看该作者
本帖最后由 yklstudent 于 2017-4-25 22:24 编辑
armink 发表于 2017-4-25 20:25
吴兄,CmBacktrace 优先支持了 RT-Thread 平台,欢迎试用哈。

编辑原因,重新提问题是否可以支持STM32的M0 M1 M3 M4 M7内核?

使用特权

评论回复
8
alex_li0824| | 2017-4-25 23:01 | 只看该作者
This is a good thing.

使用特权

评论回复
9
greatbin| | 2017-4-26 00:12 | 只看该作者
造福大众

使用特权

评论回复
10
armink|  楼主 | 2017-4-26 08:14 | 只看该作者
yklstudent 发表于 2017-4-25 22:22
编辑原因,重新提问题是否可以支持STM32的M0 M1 M3 M4 M7内核?

支持的,ARM Cortex-M 系列都支持

使用特权

评论回复
11
00750| | 2017-4-26 08:48 | 只看该作者
这个好,有机会试一下。

使用特权

评论回复
12
feelhyq| | 2017-4-26 09:05 | 只看该作者

使用特权

评论回复
13
pener| | 2017-4-26 12:00 | 只看该作者
厉害厉害

使用特权

评论回复
14
dyyxp| | 2017-4-26 12:06 | 只看该作者
非常感谢

使用特权

评论回复
15
lxyppc| | 2017-4-26 12:16 | 只看该作者
楼主这个是通过分析编译生成的elf文件
再根据内存内容来还原调用栈的么

使用特权

评论回复
16
armink|  楼主 | 2017-4-26 12:40 | 只看该作者
lxyppc 发表于 2017-4-26 12:16
楼主这个是通过分析编译生成的elf文件
再根据内存内容来还原调用栈的么

是的。。欢迎体验哈~

使用特权

评论回复
17
pentiumyto| | 2017-4-26 13:10 | 只看该作者
MARK一下,感谢高人分享。

使用特权

评论回复
18
lxyppc| | 2017-4-26 13:30 | 只看该作者
armink 发表于 2017-4-26 12:40
是的。。欢迎体验哈~

厉害,有这个工具不用手工分析了

使用特权

评论回复
19
sjrq| | 2017-10-27 14:03 | 只看该作者
我想问下怎么样  查看错误诊断信息?

使用特权

评论回复
20
jcsasm| | 2019-1-30 11:49 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

21

帖子

1

粉丝