Arm 如何选择性禁用BusFault异常及其';s升级到硬故障,是否启用了其他异常?

Arm 如何选择性禁用BusFault异常及其';s升级到硬故障,是否启用了其他异常?,arm,cortex-m,stm32f4discovery,Arm,Cortex M,Stm32f4discovery,我正在尝试禁用某段代码的总线故障例外上升。我认为可以使异常上升,但不上升任何类型的处理程序。编程手册(PM0214 p.230)中BFHFNMIGN位的描述与我所寻找的完全一样:“使优先级为-1或-2的处理程序能够忽略由加载和存储指令引起的数据总线故障。”。 这是我的尝试: SCB->SHCSR ^= SCB_SHCSR_BUSFAULTENA_Msk; //Disable only BusFault_Handler SCB->CCR |= SCB_CCR_BFHFNMIGN_Msk

我正在尝试禁用某段代码的总线故障例外上升。我认为可以使异常上升,但不上升任何类型的处理程序。编程手册(PM0214 p.230)中BFHFNMIGN位的描述与我所寻找的完全一样:“使优先级为-1或-2的处理程序能够忽略由加载和存储指令引起的数据总线故障。”。 这是我的尝试:

SCB->SHCSR ^= SCB_SHCSR_BUSFAULTENA_Msk; //Disable only BusFault_Handler
SCB->CCR |= SCB_CCR_BFHFNMIGN_Msk; //Enable BFHFNMIGN
*(uint32_t *)(0x000FFFFE) =  0xAA; //Test if BFHFNMIGN flag works
i+=1; //Any stuff
我希望执行会更进一步,但在“any stuff”行之后,执行会到达HardFault_处理程序,就好像我没有使用BFHFNMIGN位一样。在调试器的帮助下,我通过地址检查是否设置了BFHFNMIGN位,以及其他寄存器中是否存在BusFault的所有属性。
那么为什么硬件故障不忽略总线故障呢?

Cortex-M4设备通用用户指南,第4.3.9章。明确规定:

如果禁用系统处理程序并出现相应的故障,处理器将该故障视为硬故障


其他Cortex-M变体的行为应该与此相同。

您是否在异常处理程序中测试此代码?当然不是。问题是我不想进入异常处理程序。请再次阅读描述,并期待其他人看到您的问题。