使用环境

<!-- 必须 告知插件运行的环境,帮助开发者定位问题 -->

  • 操作系统版本:win10
  • 操作系统平台(x86/x64):x64
  • VsCode 版本:1.75.1
  • EIDE 插件版本:3.11.1
  • C/C++ 插件版本:1.14.3
  • 何种编译器(keil_c51/sdcc/armcc5/armgcc/...):gcc
  • 编译器版本(非编译问题可忽略):v9_2_1

描述问题

<!-- 使用简明清晰的语言描述您的问题 -->
能否有人试一试,使用gcc编译器,对一个stm32空项目,启用fpu进行浮点运算。
因为我进行了多次尝试:
构建配置中硬件浮点选择single
构筑器选项→全局选项中硬件浮点abi选择hard
预编译FPU_PRESENT=1U,ARM_MATH_CM4,可以确定的是在core_cm4.h第103行中的“__FPU_USED 1U”已经启用
添加arm_math.h没有报错
链接了libarm_cortexM4lf_math.a
浮点数的定义使用float a=1.1f;
以上操作,均在保证程序没有任何错误与警告的情况下将程序下载到单片机中测试。
但是在debug的反汇编指令中,浮点数的运算指令并未调用vmul.f32(而且我让他进行50万次浮点运算,与新建的没有进行任何fpu配置的工程运算速度一致)。好像是说,在代码编译的时候,这个指令就产生了,但是没有报错,我也不知道我是否缺少什么文件,加上这些文件的添加什么的操作步骤我可能也弄得不对,不好发布我的工程来纠正。希望可以有人发布一篇使用eide插件gcc编译器配置并且使用stm32fpu的文章。

屏幕截图

<!--使用一些截图能够更好地展现问题 -->
关于调用fpu进行浮点运算的debug反汇编指令

期望现象

<!--您期望应该产生的,但实际上却没有发生的结果-->

  • admin replied to this.
  • DontFreeze

    开浮点就是这两个步骤

    • Builder 下硬件浮点选上 single

    • 打开 Builder Options, 浮点 ABI 选 Hard

    你可以自己右键反汇编去看,具体怎么开反汇编去看文档

    未开之前:

    开之后:

    DontFreeze

    开浮点就是这两个步骤

    • Builder 下硬件浮点选上 single

    • 打开 Builder Options, 浮点 ABI 选 Hard

    你可以自己右键反汇编去看,具体怎么开反汇编去看文档

    未开之前:

    开之后:

    DontFreeze

    还有种情况:你的计算表达式写的太简单了,可能都被优化掉了,根本不需要浮点指令就可完成

    上述的简单表达式,-O3 下编译就会被优化掉

      admin 群里大佬也指出了,是我的循环计算被编译器优化掉了/哭,因为我见别人教程都是循环计算两个浮点相乘来测试开不开的差别,明天再试试,不被优化的情况下能不能调用fpu

      Write a Reply...