注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
Linchpin的个人空间 https://home.eeworld.com.cn/space-uid-525682.html [收藏] [复制] [分享] [RSS]
日志

M4之浮点运算单元FPU个人总结!!!!!!!!!!!!!!!!!!!!!!!!

热度 1已有 9059 次阅读2014-11-29 11:25

最近一直在纠结M4的浮点运算单元该怎么开启,为何语句里配置了(FPUEnable();FPULazyStackingEnable();)跟没配置程序运行速度是一个样的,有幸得到坛友指点,才解决了这个问题。
下面说一下开启FPU的方法:
首先,需要在编译器上开启FPU功能。CCS:默认为开启状态。可以在propertise——bulid——arm compiler——processor options 里的specify floating point support里配置,默认为FPv4SPD16 ,即开启状态。
其次,需要在代码里加上这两句 FPUEnable();FPULazyStackingEnable();(最好加在main函数入口处,具体原因我也不清楚。)

那面下面来讨论下这几种情况:
1.编译器未开启FPU,代码里配置了FPU。程序还是会按照未使能FPU的代码进行处理。
2.编译器开启FPU,代码里未配置FPU。如果代码中带有单精度浮点(注意是单精度)运算的代码,编译器就会使用带V的FPU单元汇编指令,无论芯片是否开启了FPU单元功能。除非用户在代码中关闭FPU功能(FPUDiable语句),那么程序执行就会出现错误,进入FaultISR;

所以我们平时写的程序只要用到了浮点运算,即使没有在代码中配置FPU,就如上面情况2所说的,默认是使用FPU功能的。。所以根本就不需要我们刻意去开启了。
还有一点要注意的是浮点运算单元只适用于单精度浮点(Float型)的运算,而对于double型就不管用。要是你语句中有 a=a*1.2 这样的语句,这个1.2系统是默认定义为double型的,运算时按double型进行运算,再把结果转化成float,所以应写成 a=a*1.2f(将1.2定义为float型) 才行。


以上为本人个人愚见,如有错误,望各位大大指点!

本文来自论坛,点击查看完整帖子内容。

发表评论 评论 (1 个评论)
回复 cnlei 2020-1-13 09:22

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章