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

Posted

技术标签:

【中文标题】STM32H7 FPU 中未设置除零异常标志【英文标题】:Division by zero exception flag not set in STM32H7 FPU 【发布时间】:2020-09-05 07:33:24 【问题描述】:

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

我检查了寄存器 CPACR 中是否启用了 FPU。

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

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

如果我看一下我得到的程序集:

VDIV.F64 d0,d1,d0

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

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

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

我错过了什么吗?

【问题讨论】:

DZE 位是否为零? 什么是 DZE ?我在架构手册中没有找到这一点。如果你说的是 DZC,是的,它是 0。 【参考方案1】:

问题出在调试器中。

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

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

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

FPSCR 寄存器不是内存映射的,可以使用 VMSR 和 VMRS 指令

所以这不是调试器问题。

【讨论】:

以上是关于STM32H7 FPU 中未设置除零异常标志的主要内容,如果未能解决你的问题,请参考以下文章

STM32H7 SPI通信:FIFO管理问题

无法在STM32H7上正确设置Cortex M7 ITM

STM32H7教程第14章 STM32H7的电源,复位和时钟系统

STM32H7教程第39章 STM32H7的DMAMUX基础知识(重要)

STM32H7教程第92章 STM32H7的FDCAN总线应用之双FDCAN实现(支持经典CAN)

STM32H7的DSP教程第33章 STM32H7不限制点数FFT实现