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教程第14章 STM32H7的电源,复位和时钟系统
STM32H7教程第39章 STM32H7的DMAMUX基础知识(重要)