【发布时间】:2013-09-12 19:29:44
【问题描述】:
相关规格:
- STM32F407IG 处理器,带 FPv4-SP FPU (Cortex M4F);
- STM32F40G-EVAL 开发板;
- IAR 嵌入式工作台 - ARM,v6.50
问题:如何在 FP 计算之前以编程方式打开 FPU,并在完成后再次关闭它?
- IAR EWARM 提供了在构建之前在项目选项中关闭/打开 FPU 的功能
-
在
main之前调用的SystemInit()中,执行如下代码:#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ #endif请注意,这会将 CPACR 位 [23:20] 设置为 1。这是必需的,否则将在下一条 FPU 汇编器指令上调用 HardFault IRQ。 但禁用此功能是否会产生任何其他影响,例如降低功耗等,或者此寄存器是否只是监管协处理器 (FPU)?
-
如果没有进一步的暗示,那么也许通过 CPACR 将其“关闭”并没有完成任何事情,这表明 FPU 仅在执行 FPU 指令集命令时消耗额外的功率。
谢谢,
【问题讨论】:
-
您应该能够从数据表中确定这一点,或者通过测量设备的实际电流消耗来确定。
-
它是一个微控制器,因此它可能会断电/时钟使 fpu 饿死以节省电力。你试过检查耗电量吗?
-
是的,我在不同的迭代中使用 Q31 和 F32 运行了 CMSIS DSP 测试。对于每种格式,我在 FPU 打开和 FPU 关闭的情况下重新构建、闪烁和测量电流消耗。如果实际使用 FPU(例如,在调用 F32 DSP 函数时),似乎只有额外的功耗。即使在 FPU 开启的情况下,Q31 构建的电流也相同。然而,仅凭这些测试,我并不相信情况总是如此。而且我没有捕捉到任何试图关闭任何 clk 的汇编程序命令。
-
此外,当主 clk 配置为电路板的高速外部时,对于 FPU 与Q31,FPU 开启和关闭。但是,当主 clk 配置为高速内部时,差异是相当大的。
-
已经很久了,你还有结果吗?我一直在寻找一些这样的数据,但链接不再有效。谢谢。
标签: assembly floating-point embedded cpu-registers stm32