原帖 | Jack | 2024-09-19 03:03 | 👍0 | 阅读约1
HardFault触发真的是同步的吗?举个例子,func_b函数执行了访问非法内存的语句后,HardFault会立刻跳转到服务函数里?会不会出现在跳转之前任然往后执行了几个语句以后再跳转的情况?
答:HardFault的触发通常是同步的,一旦发生非法操作(例如非法内存访问),处理器会立即停止当前指令并跳转到HardFault处理函数。不会出现继续执行多个语句的情况,除非处理器的流水线中已经有部分指令被预取(如果已经被预取指,那么可能会执行这些指令直到非法操作(如:非法访问内存)被发现)。预取指引发的真实死机案例见 记录一个预取指导致死机的坑。Bus error 可能会在一些系统中被捕捉并处理,但它可能升级为HardFault,具体取决于异常配置(有些芯片它可能对某些错误没有固定的中断号以及中断悬起位,那就直接会升级到Hardfault)。
相关笔记