Exception ARM编译器如何处理运行时错误?
我试图生成一个运行时错误,比如ARM Cortex M3中的除以零。我不知道为什么当我生成被零除的错误系统时会正常工作。然而,价值似乎是“无限的” ARM gcc编译器是否处理此类UsageFault错误?我还没有实现硬件异常处理程序,比如使用故障、总线故障或Mem管理。与之相反,如果发生整数除零,则不会引发异常。结果只返回Exception ARM编译器如何处理运行时错误?,exception,arm,divide-by-zero,cortex-m3,x86,Exception,Arm,Divide By Zero,Cortex M3,X86,我试图生成一个运行时错误,比如ARM Cortex M3中的除以零。我不知道为什么当我生成被零除的错误系统时会正常工作。然而,价值似乎是“无限的” ARM gcc编译器是否处理此类UsageFault错误?我还没有实现硬件异常处理程序,比如使用故障、总线故障或Mem管理。与之相反,如果发生整数除零,则不会引发异常。结果只返回0 编辑:这只适用于Cortex-A系列。正如Jose所指出的,Cortex-M系列中有一个用于整数除法的控制寄存器,如下所述的浮点除法。请参见他答案中的链接 对于浮点操
0
编辑:这只适用于Cortex-A系列。正如Jose所指出的,Cortex-M系列中有一个用于整数除法的控制寄存器,如下所述的浮点除法。请参见他答案中的链接
对于浮点操作,浮点控制寄存器(
FPSCR
对于aarch32或FPCR
对于aarch64)决定是否引发异常。如果在那里设置了相应的位,则会引发异常,否则只会在浮点状态寄存器中设置一个标志(aarch32中的FPSCR
,或aarch64中的FPSR
),该标志随后指示错误。该寄存器可通过msr
设置,并通过mrs
读取
如果未引发异常,则有以下规则:
dividedinfinity
isinfinity
NaN
dividedzero
iszero
NaN
- 任何其他被除的
都是无穷大
±零
- 在
中除±无穷大
以外的任何其他值(根据红利进行签名, 这就是你在截图中看到的情况)零
除此之外的任何东西都是无限
±无限
除此之外的任何值都是零
±零
FDIV
伪代码
参考资料:
- 在aarch64
- 在aarch32