我正在使用 ARM Cortex-M3 和 Cortex-M4。我想利用 GCC 的定点类型扩展。我正在使用summ-arm-toolchain。以下代码行
_Fract f = 0.1;
抛出以下编译错误:
error: fixed-point types not supported for this target
GCC 真的不支持 Cortex-M3/M4 的定点类型,还是我在这里遗漏了什么?
只是为了记录,我会回答我自己的问题。
TL;DR :在 gcc 的嵌入式分支(4.6 版及更高版本)中,ARM Cortex-M/R 架构支持定点类型扩展。在这里可以找到基于该 gcc 分支的工具链。
长答案:
在撰写本文时,召唤臂工具链默认下载 linaro-gcc-4.5-2011.02(或 gcc-4.5.2)。默认情况下,它没有启用定点类型扩展。我尝试将参数添加--enable-fixed-point
到configure
,但我得到了这个错误描述的编译错误。我尝试使用较新版本的 (linaro-)gcc,但在将其自己提供的 gcc 补丁应用到此较新版本时,召唤臂工具链遇到了问题。我还尝试使用此工具链的dev分支(使用 linaro-gcc-4.6-2011.10)但没有成功。看起来,在这一点上,ARM Cortex-M/R 既不支持定点扩展,linaro-gcc 也不支持gcc的主要分支。
然后我尝试了gcc-arm-embedded toolchain,它基于 gcc 的嵌入式分支。对于目标 ARM Cortex-M3 和 Cortex-M4,我能够毫无问题地编译我的定点类型示例程序。2011 年末增加了对 Cortex-M/R 扩展的支持,正如在这个线程中看到的那样。