1、测试环境:MDK + STM32F407

2、汇编重写 HardFault_Handler  中断

3、根据输出 nextPoint 地址对照编译生成的 .map 文件

/* 硬件错误中断的回调 */
void HardFault_CallBack_MSP(void)
{
unsigned int MSP = __get_MSP();
unsigned int nextPoint1 = *((unsigned int*)MSP + 5);
unsigned int nextPoint2 = *((unsigned int*)MSP + 6);
unsigned int nextPoint3 = *((unsigned int*)MSP + 7); while (1)
{
static unsigned int i = 0;
printf("<%s>[%d] MSP = 0x%.8X, nextPoint = 0x%.8X / 0x%.8X / 0x%.8X\r\n",
__func__, ++i, MSP, nextPoint1, nextPoint2, nextPoint3);
for (int j = 0; j < 100000000; j++);
}
} /* 硬件错误中断的回调 */
void HardFault_CallBack_PSP(void)
{
unsigned int PSP = __get_PSP();
unsigned int nextPoint1 = *((unsigned int*)PSP + 5);
unsigned int nextPoint2 = *((unsigned int*)PSP + 6);
unsigned int nextPoint3 = *((unsigned int*)PSP + 7); while (1)
{
static unsigned int i = 0;
printf("<%s>[%d] PSP = 0x%.8X, nextPoint = 0x%.8X / 0x%.8X / 0x%.8X\r\n",
__func__, ++i, PSP, nextPoint1, nextPoint2, nextPoint3);
for (int j = 0; j < 100000000; j++);
}
} /**
* @brief This function handles Hard fault interrupt.
*/
__asm void HardFault_Handler(void)
{
extern HardFault_CallBack_MSP
extern HardFault_CallBack_PSP /* lr = 0xFFFFFFF9 跳转 HardFault_CallBack_MSP */
CMP lr, #0xFFFFFFF9
BLEQ HardFault_CallBack_MSP /* lr = 0xFFFFFFFD 跳转 HardFault_CallBack_PSP */
CMP lr, #0xFFFFFFFD
BLEQ HardFault_CallBack_PSP
}

STM32F407 HardFault_Handler 中断输出初步定位越界问题的更多相关文章

  1. STC10F10XE定时器中断输出10KHz的方波程序

    //咱做硬件的也动手做点测试程序,为了测试新做的电机驱动板,找了个51的板子当10K信号发生器测试IGBT开关延时时间. #include <STC_NEW_8051.H>#include ...

  2. 定义一个大数组时,出现错误,程序进入HardFault_Handler中断

    在原子的串口程序前加了几个数组定义,加了个对数组处理的函数,出现了HardFault_Handler的错误,不知道怎么解决!!! 因为局部变量是存放在栈区的,而全局变量在全局区(静态区),如果栈区较小 ...

  3. u-boot中断功能初步分析之---------按键中断

    作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 以前一直有个疑问,在U-boot下到底能不能使用中断,为了验证这个问题,于是乎,昨天晚上我在自己的 TQ2 ...

  4. STM32F407 外部中断 个人笔记

    IO口 STM32F4有上百个IO口中,每个都可以作为外部中断输入 中断线 STM32F4的中断控制器支持22个外部中断/事件请求(中断线) 对于每个中断线,我们可以设置相应的触发方式(上升沿触发,下 ...

  5. 内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]

    前段时间开发的一个后端C模块上线后,线上出core,初始时,因为訪问压力不大,所以崩溃是上线3天左右出现的.当时用gdb跟进调用堆栈并检查源代码,发现出core位置的代码沒有啥问题.因为当时开发任务较 ...

  6. Linux中断技术、门描述符、IDT(中断描述符表)、异常控制技术总结归类

    相关学习资料 <深入理解计算机系统(原书第2版)>.pdf http://zh.wikipedia.org/zh/%E4%B8%AD%E6%96%B7 独辟蹊径品内核:Linux内核源代码 ...

  7. Linux mips64r2 PCI中断路由机制分析

    Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...

  8. Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框

    背景: 近期因实际项目需要,在特定操作下触发定位请求,取到用户位置及附近位置. 问题: 经初步选型,最终决定接入百度定位,按照百度定位SDK Android文档,接入过程相对顺利.但随后发现,在小米系 ...

  9. Linux驱动设计—— 中断与时钟

    中断和时钟技术可以提升驱动程序的效率 中断 中断在Linux中的实现 通常情况下,一个驱动程序只需要申请中断,并添加中断处理函数就可以了,中断的到达和中断函数的调用都是内核实现框架完成的.所以程序员只 ...

  10. 线上问题:如何定位解决CPU高占有率

    (原文转自:http://www.blogjava.net/hankchen) 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题. 根据top命令,发现PID为28555的Java进程占用 ...

随机推荐

  1. RocketMQ - 消费者概述

    消费流程 消费者组: 一个逻辑概念,在使用消费者时需要指定一个组名.一个消费者组可以订阅多个Topic. 消费者实例: 一个消费者组程序部署了多个进程,每个进程都可以称为一个消费者实例. 订阅关系: ...

  2. CRT 与 exCRT

    感觉网上很多写的都不是很清楚啊 awa. CRT 就是解这个方程 \(\begin{cases}x\equiv r_1 \pmod {m_1}\\ x\equiv r_2 \pmod {m_2} \\ ...

  3. 网关与网络地址(网络号)以及IP地址、广播地址

    转载新浪博客: http://blog.sina.com.cn/s/blog_406127500101i8bp.html

  4. Prime Distance

    Description The branch of mathematics called number theory is about properties of numbers. One of th ...

  5. 在VSCode中配置代码自动 eslint 格式化 (实测有用)

    一.Eslint Eslint 是用来检测和规范代码格式的工具,应用在工程化项目中,可以保证项目代码格式的一致性和规范性,大大提升了代码的可读性.   二.配置过程 本博客是讲述对一个已经引用 esl ...

  6. 关于HTML5中Video标签播放问题

    PS:官网首页视频IOS与安卓都可播放代码: <video width="100%" height="auto" type="video/mp4 ...

  7. IO相关了解

    1.IO的概念 IO简单来讲就是对输入输出设备的简化表达形式 单片机中各种接口,进行数据流的传输 从磁盘中读取数据至内存,又或者从内存中写入磁盘 编程中的IO 此时的IO其应用程序的运行态,即进程-- ...

  8. liunx安装docker (自我记录)

    1 安装 安装所需的软件包dnf install -y yum-utils device-mapper-persistent-data lvm2 //官方源地址(比较慢) ~]# dnf config ...

  9. Android 7.0+模拟器Fiddler抓包详细教程 fiddler443问题解决办法

    https://blog.csdn.net/qq_43278826/article/details/124291040 [前言]         众所周知,假如设备是android 7.0+的系统同时 ...

  10. mybatis动态标签——trim

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...