Closed rh-chen closed 6 years ago
代码上是有这句的: ` volatile int SCB_CCR = (volatile int ) 0xE000ED14; // SCB->CCR int x, y, z; pr_debug("before CCR:0x%x\n", SCB->CCR);
// *SCB_CCR |= (1 << 4); /* bit4: DIV_0_TRP. */
SCB->CCR |= 0x18; /* enable div-by-0 and unligned fault */
pr_debug("after CCR:0x%x\n", SCB->CCR);
x = 10;
y = 0;
z = x / y;
pr_debug("z:%d\n", z);
`
但实际还是进不了 hardfault 中断。 Debug时发现 CCR中的值 在 |= 0x18 之后,并未发生改变。
而同样的代码,在M4的MCU上运行,则可以进入HardFault_Handle
M0不是硬件除法器,是软件库处理的除法,所以不会进入进入HardFault 。
原来如此,涨知识了~
https://github.com/armink/CmBacktrace/blob/master/demos/non_os/stm32f10x/app/src/fault_test.c#L34
确定下这一位有没有置 1