【问题标题】:How to make use of the GCC fixed-point types extension on ARM Cortex-M?如何在 ARM Cortex-M 上使用 GCC 定点类型扩展?
【发布时间】:2012-06-15 20:05:34
【问题描述】:

我使用的是 ARM Cortex-M3 和 Cortex-M4。我想使用 GCC 的fixed-point type extension。我正在使用 summon-arm-toolchain。下面这行代码

_Fract f = 0.1;

抛出以下编译错误:

error: fixed-point types not supported for this target

GCC 真的不支持 Cortex-M3/M4 的定点类型,还是我在这里遗漏了什么?

【问题讨论】:

  • 我怀疑你的 GCC 是在不支持定点的情况下构建的,可能是为了让工具链有点膨胀。您可以尝试构建自己的 GCC...
  • @R..,嘿,我什至不知道 GCC 定点扩展。甜的。自 1995 年以来情况发生了变化。
  • @R 我尝试了一个不同的工具链,gnuarm 用于 ARM7TDMI。我从这个工具链的源代码编译了 gcc4.4.2。我仍然得到相同的编译错误。
  • 谢谢大家的建议,他们真的帮我找到了明确的答案。

标签: c gcc embedded arm fixed-point


【解决方案1】:

为了记录,我会回答我自己的问题。

TL;DR:在 gcc(版本 4.6 及更高版本)的 embedded 分支中,ARM Cortex-M/R 架构支持定点类型扩展。基于该 gcc 分支的工具链位于 here

长答案

在撰写本文时,summon-arm-toolchain 默认下载 linaro-gcc-4.5-2011.02(或 gcc-4.5.2)。它确实默认启用了定点类型扩展。我尝试将参数--enable-fixed-point 添加到configure,但是我得到了这个bug 描述的编译错误。我尝试使用更新版本的 (linaro-)gcc,但 summon-arm-toolchain 在将自己提供的 gcc 补丁应用到这个更新版本时遇到问题。我还尝试使用此工具链的 dev 分支(使用 linaro-gcc-4.6-2011.10)但没有成功。看起来,此时,linaro-gcc 和 gcc 的 main 分支都不支持 ARM Cortex-M/R 的定点扩展。

然后我尝试了gcc-arm-embedded toolchain,它基于gcc的embedded分支。对于目标 ARM Cortex-M3 和 Cortex-M4,我能够毫无问题地编译我的 定点类型 示例程序。 2011 年末添加了对 Cortex-M/R 扩展的支持,如 this thread 所示。

【讨论】:

    【解决方案2】:

    根据GCC Wiki,您可以在配置时通过将--enable-fixed-point作为参数传递给GCC来启用定点扩展。

    此外,根据对此 gcc bugthis 的评论。

    目前仅支持 MIPS 目标的定点支持。

    【讨论】:

    • 在编译 GCC 或编译应用程序时是否应该传递此选项?我刚刚用 gcc 版本 4.6.1 (Sourcery CodeBench Lite 2011.09-69) 尝试了这个,并得到了arm-none-eabi-gcc.exe: error: unrecognized option '--enable-fixed-point'
    • 您在执行 ./configure GCC 即编译 GCC 时肯定需要这样做。我不确定在编译您的应用程序时是否也需要它,但我相信如此。另请参阅我编辑的答案中的链接。
    • 我无法真正确认这是问题所在,因为我无法使用 --enable-fixed-point 编译 gcc(召唤臂工具链使用的那个)。使用this toolchain 似乎可以在 ARM Cortex-Mx 上使用定点类型扩展
    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2015-03-10
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    相关资源
    最近更新 更多