GCC ARM cortex-m0 除0问题

使用的工具链arm-none-eabi-4.6

本来想用除0触发 HardFault, 但实际过程中没有发生,比较奇怪,原来cortex-m0不支持除法指令,使用的函数代替,除法函数的汇编:

1 00003184   < __aeabi_uidiv > :
2         3184 :     2900                 cmp     r1,   # 0
3         3186 :     d034                 beq . n     31f2   < . udivsi3_skip_div0_test + 0x6a >
4
5 00003188   < . udivsi3_skip_div0_test > :
6         3188 :     2301                 movs     r3,   # 1
7         318a :     2200                 movs     r2,   # 0
8         318c :     b410                 push     { r4 }
9         318e :     4288                 cmp     r0,   r1

 

可以看到进入__aeabi_uidiv后先将被除数与0做判断,如果不为0才做除法运算。

你可能感兴趣的:(GCC ARM cortex-m0 除0问题)