硬汉嵌入式论坛

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

[BSP视频教程] STM32H7视频教程第6期:MDK专题进阶,Cortex-M内核芯片Hardfault硬件异常调试分析定位(2022-02-17)

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2022-2-17 04:20:00 | 显示全部楼层 |阅读模式
本期视频为大家分享MDK专题第2期:Cortex-M内核芯片Hardfault硬件异常调试分析定位。

后面的各种项目代码调试基本都是在跟硬件异常打交道,是提升调试能力的重中之重,所以本期视频教程争取言简意赅的把相关知识点做个系统介绍。学习完了,至少知道朝那个方向去解决问题。
另外,本期视频教程比前面几个章节视频叫要稍微花点时间去理解,涉及到的内核知识略多,所以学习的时候需要稍微有点耐心。

视频(1080p):

https://www.bilibili.com/video/BV15R4y1L7WH



本期视频主要分为三个部分:
第1部分,全面介绍各种异常的含义。
第2部分,硬件异常代码分析以及部分寄存器硬件自动入栈出栈处理。
第3部分,调试实战分析。


QQ截图20220217041250.png
1.png
2.png



配套例子和文档:
apnt209.pdf (1.13MB)
硬件异常分析定位.7z (1.28MB)


参考资料:
1、【烧脑技术贴】无法回避的字节对齐问题,从八个方向深入探讨(变量对齐,栈对齐,DMA对齐,结构体成对齐,Cache, RTOS双堆栈等)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109400

2、STM32H7驱动SDRAM两种硬件异常IMPRECISERR和PRECISERR
https://www.armbbs.cn/forum.php?mod=viewthread&tid=95142

3、STM32H7教程发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至94章
https://www.armbbs.cn/forum.php?mod=viewthread&tid=86980





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2022-2-17 04:37:43 | 显示全部楼层
更新完毕。
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2022-2-17 08:38:58 | 显示全部楼层
回复

使用道具 举报

2

主题

18

回帖

24

积分

新手上路

积分
24
发表于 2022-2-17 18:24:33 | 显示全部楼层
顶起
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2022-2-18 01:04:28 | 显示全部楼层
下期视频考虑安排分散加载,还没有想好。
回复

使用道具 举报

4

主题

137

回帖

149

积分

初级会员

积分
149
发表于 2022-2-18 18:29:21 | 显示全部楼层
老大,segger_hardfaul可以分享下包含gcc的源文件吗,咱们只做了iar和mdk的,想在cubeide中也使用
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2022-2-19 08:03:40 | 显示全部楼层
浴火重生 发表于 2022-2-18 18:29
老大,segger_hardfaul可以分享下包含gcc的源文件吗,咱们只做了iar和mdk的,想在cubeide中也使用

KEIL和SEGGER都升级了Cortex-M系列内核出现硬件异常时原因分析笔记,支持GCC,IAR和
https://www.armbbs.cn/forum.php? ... 1940&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2022-9-5 15:17:48 | 显示全部楼层
在这里我有个问题。我的平台是MDK。
我看segger的HardFault 的pdf手册:直接修改HardFault_Handler的方式:
static volatile unsigned int _Continue;
/**
  * @brief  This function handles Hard Fault exception.
  * @param  None
  * @retval None
  */
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
        _Continue = 0u;
        while (_Continue == 0u) {
        }
}
然后调试的时候,修改_Continue的值,也可以跳出HardFault_Handler 定位到出错的地方,
但我实际调试时修改了_Continue的值,并没有到出错的地方,而是又进入Hardfault了
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2022-9-5 16:29:46 | 显示全部楼层
解决了,MDK AC6编译器异常时不能通过 Show caller code找到出错地方,但AC5可以
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2022-9-7 01:33:28 | 显示全部楼层
xuedidi 发表于 2022-9-5 16:29
解决了,MDK AC6编译器异常时不能通过 Show caller code找到出错地方,但AC5可以

好的,昨天弄周报了,没有及时回复。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2022-9-9 17:18:08 | 显示全部楼层
eric2013 发表于 2022-9-7 01:33
好的,昨天弄周报了,没有及时回复。

嗯嗯,大佬,有个问题,Segger的Hardfault文件在AC5下编译: Unknown opcode __IAR_SYSTEMS_ASM__ , expecting opcode or Macro,在AC6下编译就可以,裁剪下在AC5下可以编译,比较好奇的是为什么不能直接编译,谢谢。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-3-21 21:25:59 | 显示全部楼层
都是干货,还需要多花时间来消化
回复

使用道具 举报

3

主题

13

回帖

22

积分

新手上路

积分
22
发表于 2023-11-28 18:13:58 | 显示全部楼层
硬汉哥,  请教下,  假如我的函数地址是0x08001234 正常调用时没问题的  这时候我把它有意设置为0x88001234 这个时候进入HardFault_Handler中断里    能否在HardFault_Handler里把这个函数地址修正 然后让程序继续正常执行呀
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-11-29 08:31:38 | 显示全部楼层
面包人 发表于 2023-11-28 18:13
硬汉哥,  请教下,  假如我的函数地址是0x08001234 正常调用时没问题的  这时候我把它有意设置为0x88001234  ...

可以试试强行在HardFault_Handler将LR值修改为你要跳转的地址。另外其它寄存器的值要是这个跳转前的正常值。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 19:01 , Processed in 0.264708 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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