2

我有一个 STM32F406VG MCU,我有一个 arm GCC。我对通过谷歌找到的 FPU 使用了一些奇怪的参数来为我的平台编译,但我找不到任何参考文档来进行对应。

我使用 -mfpu=fpv4-sp-d16,我有数据表告诉我我有一个 Cortex-M4F,但没有关于 FPU。我发现了一些对 GCC 无用的文档:http: //gcc.gnu.org/onlinedocs/gcc/ARM-Options.html和一些来自 ARM 的无用文档:http: //infocenter.arm.com/help/index.jsp?主题=/com.arm.doc.dui0489c/CIAHHAFG.html

但我无法精确定义以将这个论点与我的 FPU 相匹配。互联网上是否有某种带有所有零件编号和相应精确 FPU 定义的巨型表?

4

2 回答 2

3

您可以从多个地方组合这些信息。首先,您必须确定您正在查看的 ARM 处理器,然后找到该处理器的 TRM。在这种情况下,Cortex-M4 TRM 可在此处获得:

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0439d/DDI0439D_cortex_m4_processor_r0p1_trm.pdf

这告诉您(第 7 节)Cortex-M4 中的 FPU 是:

ARMv7-M 浮点扩展 (FPv4-SP) 的单精度变体的实现。

查看 ARMv7m 架构参考手册(可在http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0403c/index.html获得许可),我们可以了解第 A1.3 节中的浮点架构扩展。在这里,我们还可以找到以下建议:

根据为 ARMv7-A 和 ARMv7-R 架构配置文件定义的 VFP 实现选项,ARMv7-M 浮点扩展的完整特征是 FPv4-SP-D16-M。一些软件工具可能需要这种特性。

GCC 不会将“m”添加到特征的末尾,因此我们可以使用选项 -mfpu=fpv4-sp-d16。

对于 VFPv4-d16 的含义,我们必须查看 ARMv7a 架构参考手册(在此处的许可证后面http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0419c/index. html ) 其中 A1.4.1 节给出了这个定义:

VFPv4 可以使用 32 或 16 个双字寄存器来实现,请参阅第 A2-56 页的高级 SIMD 和浮点扩展寄存器。必要时,使用以下术语区分这些实施选项:

• VFPv4-D32 或 VFPv4U-D32,用于 32 个寄存器实现

• VFPv4-D16 或 VFPv4U-D16,用于 16 个寄存器实现。

在使用术语 VFPv4 的地方,它涵盖了这两个选项。

于 2013-10-20T13:13:17.493 回答
1

ARM 的 Cortex M4 页面告诉它有一个“单精度浮点单元 - 符合 IEEE 754”,对应于 gcc 上的“fpv4-sp-d16”。d16 表示有 32 个 sp 寄存器。

http://mobile.arm.com/products/processors/cortex-m/cortex-m4-processor.php?tab=Specifications

于 2013-10-19T09:55:10.360 回答