CCS 4.2.5版本中如何开启FPU指令编译功能



试了下浮点运算,看了汇编代码,FPU指令没有用上,估计编译器的FPU指令编译功能没有打开。

KEIL环境下的FPU功能还是比较容易找的。但是现阶段正在学习使用CCS环境,希望有哪位指点下!

  • 一般来说,选择M4F系列产品,编译器会默认使用浮点指令。楼主看看编译器配置里面对内核的选择是否正确。另外可以检查下自己的编译器版本是否支持cortex-m4f内核的,如果版本较老则需要升级编译器。

    实际上现在CCSv5.2版本已经出来了,建议楼主换CCSv5.2,对新器件的支持会更好,性能也会更好。4.2的licenses也可以升级到支持5.x的

    processors.wiki.ti.com/.../Download_CCS

  • 编译器配置没有问题,选择的就是LM4F232H5QD,4.2.5版本的CCS是支持LM4F的。

    之前曾有个程序,main开始时未使能FPU单元(FPUEnable(); FPULazyStackingEnable();),在keil环境下编译,烧写程序后,程序进入异常,开启FPU之后,程序正常,程序中并未使用到浮点运算,但是通过论坛知道KEIL编译器在打开FPU编译功能的情况下,有可能即使没有使用到浮点运算,编译器优化过程中也可能使用了FPU单元的部门寄存器。

    同样的程序在CCS中(未使能FPU单元(FPUEnable(); FPULazyStackingEnable();)),编译烧写之后程序正常执行。

    那时我就怀疑过CCS编译器FPU指令默认是关闭的。

    现在在下CC5.2版本,明天安装了之后再编译下看看!

  • 楼主的编译器版本是多少?

    通常来说,如果CCS所用的编译器版本支持M4F的话,在编译器中使用下面的指令可以开启编译器对浮点单元的支持。楼主可以检查下自己编译器的设置

    -mv7M4 --float_support=FPv4SPD16

    在使用TI自带M4F的CCS例程时,实际上初始化时已经开启了FPU单元,个人觉得是在_c_int00函数中做的。楼主可以试试用FPUDisable()把FPU关掉,如果关掉之后用了浮点,系统会出错的

  • 找到原因了! 谢谢,Richard!

    我当初只定义了如下语句之后查看汇编代码,也没仔细看。

    float  a ;

    a = a*1.1;

    编译器把1.1认成了双精度浮点了(double),所以汇编出现了aeabi_fid,aeabi_dmul,aeabi_dif,当时没细看也不知道什么意思,后来再看了下明白了,是float转double,再double乘法,最后又把double转float了。最基础的错误,不好意思!(CCS和keil编译器都是如此)

    把语句改为

    a = a*(float)1.1; 就正常了!

    回去要好好翻翻C语言的书了!

    再次感谢,Richard!!

  • 不用客气,楼主在写代码时候,像a=a*(float)1.1,也可以写成a *= 1.1f,直接向编译器说明这是浮点数。

    建议在写常数值时都采用这种方法,这样程序的动作会更容易预测。