硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3545|回复: 7
收起左侧

[MDK] HardFault_Handler 一种处理方法

  [复制链接]

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2019-9-2 13:39:09 | 显示全部楼层 |阅读模式
本帖最后由 在水一方 于 2019-9-2 13:49 编辑

这里先感谢下朱天龙 (Armink) 大佬!!
连接地址: armink/CmBacktrace
为什么写这个,发现很多段错误无法使用 MDK 自带的 Show Caller Code 跳转到段错误函数。

1. 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 编译器;

2. 使用 MDK 追踪 HardFault_Handler
1.jpg

2.jpg
这样的段错误 无法跳转

3. 使用CmBacktrace 追踪 HardFault_Handler
3.1 添加 CmBacktrace 初始化
3.jpg

3.2 查看断言
4.jpg

3.3 查看断言结果
5.jpg

3.4 查找错误
6.jpg
这样 就找到了问题所在!

4. CmBacktrace  移植和使用
4.1 拷贝 cm_backtrace 到工程下
7.jpg


4.2  addr2line 到axf 文件夹下(根据系统不同 拷贝不同 addr2line.exe )

11.jpg
12.jpg

4.3 添加文件和目录 (根据 不同环境添加不同 cmb_fault.S)

8.jpg
9.jpg


4.4 配置 cmb_cfg.h
13.jpg
这里配置 :
1. cmb_println 断言功能映射
2. 选择是否支持操作系统, 这里选择不支持。(操作系统移植 查看 Demos 文件夹 和 git)
3. 配置内核类型
4. 使能 stack information
5. 配置 print 信息语言模式


4.5 初始化 cm_backtrace

10.jpg


具体有疑问,自己参考 Git

11.jpg
10.jpg
9.jpg
8.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2019-9-2 13:47:20 | 显示全部楼层
MDK的的确是
MDK的没有IAR的好用,也是最简单的,无需移植任何代码,直接提示错误位置和错误原因。

IAR8自带的硬件异常分析提示功能比较实用
http://www.armbbs.cn/forum.php?m ... id=91746&fromuid=58
(出处: 硬汉嵌入式论坛)

回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
 楼主| 发表于 2019-9-2 13:50:57 | 显示全部楼层
eric2013 发表于 2019-9-2 13:47
MDK的的确是
MDK的没有IAR的好用,也是最简单的,无需移植任何代码,直接提示错误位置和错误原因。

确实 MDK 做的不够好
回复

使用道具 举报

3

主题

164

回帖

173

积分

初级会员

积分
173
发表于 2019-9-2 14:39:45 | 显示全部楼层
这个确实不错,之前也移植测试通过了。
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

积分
16
发表于 2019-10-11 08:28:21 | 显示全部楼层
收藏了~谢谢
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2019-10-12 11:01:55 | 显示全部楼层
本帖最后由 cpu55 于 2019-10-14 11:11 编辑

为什么运行后,只能看到在main.c中调用出错函数的行号,,,
怎样才能看到 函数中出错的位置
58751329050e80434a6ff9679a2b5c8.png
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2019-10-18 14:35:12 | 显示全部楼层
cpu55 发表于 2019-10-12 11:01
为什么运行后,只能看到在main.c中调用出错函数的行号,,,
怎样才能看到 函数中出错的位置

派大星你好呀
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 2019-11-9 10:13:30 | 显示全部楼层
很需要这个,谢谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 20:16 , Processed in 0.180473 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表