这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【S32K3XX】HardFault 处理中触发 HardFault 异常事件的

共1条 1/1 1 跳转至

【S32K3XX】HardFault 处理中触发 HardFault 异常事件的CPU行为

高工
2026-06-02 17:00:51     打赏

【简介】

使用Cortex 处理器一直有个疑问如果在hardfault 中触继续触发 hardfault  的异常事件会发生什么?抱着这个想法本地在hardfault  的异常处理中调用如下的测试接口继续触发hardfault 异常。

static int _IllegalWrite(void) {
int r;
volatile unsigned int* p;

r = 0;
p = (unsigned int*)0x00000000;       // 0x00100000-0x07FFFFFF is reserved on STM32F4
//  F44F1380    mov.w r3, #0x00100000
*p = 0x00BADA55;
//  4A03        ldr r2, =0x00BADA55
//  601A        str r2, [r3]         <- Illegal write is done here
return r;
//  9B00        ldr r3, [sp]
//  4618        mov r0, r3
//  B002        add sp, sp, #8       <- Fault might be raised here
//  4770        bx lr
}


本地触发hardfault 后发现代码attach 上去发现mcu 会卡死在异常的写操作位置。

image.png

此时发现hardfaut 正在处理中,此时在触发hardfault 因为此时触发的是同一个中断,当前的hardfaut  的一场还在处理中新触发的异常则是不会被执行。 在HardFault 异常处理函数内部又触发新的 HardFault,导致 CPU 陷入死循环的异常嵌套,最终表现为芯片卡死的现象。因为Cortex-M处理器的中断无法嵌套相同优先级的中断,我们可以在Usage fault 中触发hardfault 的处理在验证下是否会进入hard fault.以下是cortex-m 的异常优先级定义。

image.png



   


           


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]