STM32H7 FPU 中未设置被零除异常标志

Division by zero exception flag not set in STM32H7 FPU

我正在研究 STM32H743 的 FPU(Nucleo 板,Keil IDE)。

我检查过 FPU 已在寄存器 CPACR 中启用。

我编译了以下愚蠢的代码:

volatile double test = 0;
test = 1.0 / test;

如果我查看程序集,我得到:

VDIV.F64 d0,d1,d0

其中 d1 包含 1 的双精度表示,d0 包含 0 的双精度表示。

在指令 d0 之后包含 0x7F00...00 这是无穷大的表示,所以它看起来很好。

但是寄存器 FPSCR 中的标志 DZC 没有设置,正如我所期望的那样。

我是不是漏掉了什么?

问题出在调试器中。

从代码(使用指令 VMRS)读取 FPSCR 工作正常。但是通过Keil 5.28的调试器(System Viewer FPU标签)这个值是错误的。

有人告诉我 gdb 也有同样的问题。

编辑:因为我回到了 FPU 异常管理,我注意到我之前的回答是错误的。 Cortex M7 编程手册明确指出:

The FPSCR register is not memory-mapped, it can bee accessed using the VMSR and VMRS instructions

所以这不是调试器问题。