armink / CmBacktrace

Advanced fault backtrace library for ARM Cortex-M series MCU | ARM Cortex-M 系列 MCU 错误追踪库
MIT License
1.59k stars 640 forks source link

M0, 除0操作时,并不进入HardFault 中断, 可能会是什么原因呢?(见 4 楼) #14

Closed rh-chen closed 6 years ago

armink commented 6 years ago

https://github.com/armink/CmBacktrace/blob/master/demos/non_os/stm32f10x/app/src/fault_test.c#L34

确定下这一位有没有置 1

rh-chen commented 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

Jonny-hzy commented 6 years ago

M0不是硬件除法器,是软件库处理的除法,所以不会进入进入HardFault 。

armink commented 6 years ago

原来如此,涨知识了~