首页 > 其他分享 >STM32F407 HardFault_Handler 中断输出初步定位越界问题

STM32F407 HardFault_Handler 中断输出初步定位越界问题

时间:2023-01-14 15:23:56浏览次数:51  
标签:HardFault int unsigned MSP Handler STM32F407 PSP 0x%

1、测试环境:MDK + STM32F407

2、汇编重写 HardFault_Handler  中断

/* 硬件错误中断的回调 */
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
}

标签:HardFault,int,unsigned,MSP,Handler,STM32F407,PSP,0x%
From: https://www.cnblogs.com/yangjinghui/p/17051877.html

相关文章

  • Bean method 'eurekaHealthCheckHandler' not loaded because @ConditionalOnProperty
    springboot项目报错:Beanmethod'eurekaHealthCheckHandler'notloadedbecause@ConditionalOnProperty(eureka.client.healthcheck.enabled)did....eureka配置一下heal......
  • 自定义全局异常+处理器handler开发
    自定义全局异常/***全局异常处理*/@DatapublicclassBizExceptionextendsRuntimeException{privateIntegercode;privateStringmsg;publi......
  • ARM Cortex-M0单片机进Hardfault后串口如何打印输出错误信息
    如果在程序运行时进hardfault想要打印出现问题前的错误信息,可按如下操作实现:我们先找到系统启动文件中的HardFault_Handler汇编入口,将其整个替换为如下写法:HardFault_Ha......
  • netty中channelHandler实现原理及最佳实践|极客星球
    为持续夯实MobTech袤博科技的数智技术创新能力和技术布道能力,本期极客星球邀请了企业服务研发部工程师梁立从TCP的粘包/半包、Netty处理粘包/半包及源码分析、开源项目......
  • SpringBoot之HandlerInterceptor拦截器的使用
    ​​1、SpringBoot之HandlerInterceptor拦截器的使用——(一)​​​​2、SpringBoot之HandlerInterceptor拦截器的使用——(二)自定义注解​​​​3、SpringBoot之HandlerInte......
  • [转]C# 的EventHandler 实际使用例子
    以下为经过实测的EventHandler使用例子://定义事件,这里有两种方式,当前例子使用方式2,方便实际传参;//publiceventEventHandlermEventHandler;//方式1,默认用......
  • ExceptionHandlerExceptionResolver详解
    ExceptionHandlerExceptionResolver是SpringWebMVC中使用最简单、最常用的异常处理器之一,可以进行全局异常统一处理。在项目初始化时,ExceptionHandlerExceptionResolver......
  • RequestMappingHandlerAdapter详解
    RequestMappingHandlerAdapter是日常项目中使用最多的HandlerAdapter实现类。它还有一个抽象父类AbstractHandlerMethodAdapter,顾名思义,是专门用来处理HandlerMethod类型......
  • MAUI新生6.6-搜索栏SearchHandler
    一、搜索栏SearchHandler的基本原理,如下图所示 搜索栏主要有两部分组成:UI控件和SearchHandler派生类。其中UI控件负责数据展示,并提供查询搜索和点击选择项的UI交互功......
  • WPF中使用EventHandler更新UI内容
    在WPF中,EventHandler类似于一套订阅与发布的操作。甲方提供一个event的回调注册入口让乙方来订阅自己发布的event。这么理解起来就是需要发布消息的一方定义event(就像是C语......