有人使用STM32芯片从事产品开发,代码中有涉及到除以0操作。他们发现基于相同的代码,使用不同IDE会出现不同结果。在IAR或ARM MDK环境下除以0操作所得结果为0,而在STM32CubeIDE环境下的运行时则产生HardFault异常。他们对这个结果感觉很奇怪,甚至怀疑是不是CubeIDE环境有bug。
根据ARM内核相关手册描述,关于除以0事件或非对齐访问事件是否进行捕捉并触发异常是可以配置的。如下图所示:
其中,除以0事件由内核的配置控制寄存器CCR的DIV_0_TRP控制。该位清0时,系统不对除以0事件触发异常,结合下面截图描述得知,此时硬性返回0值作为结果。