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
所以这不是调试器问题。
我正在研究 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
所以这不是调试器问题。