打印
[STM32F1]

KEIL5 cortex-m3使用FPU浮点库

[复制链接]
25|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
saservice|  楼主 | 2024-6-30 03:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.ARM Cortex M4
  ARM Cortex-M4处理器是由ARM专门开发的最新嵌入式处理器,在M3的基础上强化了运算能力,新加了浮点、DSP、并行计算等。Cortex-M4处理器的最大亮点之一,也是本文主要描述的一个功能就是增加了一个单精度浮点单元(FPU),能够高效率处理较为复杂的浮点运算,如电机闭环控制、PID算法、快速傅里叶变换等。

2.使用M4的浮点运算
2.1获取FPU库
M4浮点库集成在Keil中,安装完Keil工具,即可从对应的文件路径获取FPU库。
 ·对于Keil4,库文件在路径:“…\Keil\ARM\CMSIS”
 ·对于Keil5,库文件在路径:“…\Keil_v5\ARM\Pack\ARM\CMSIS\4.3.0\CMSIS”,前面“…”是安装的磁盘路径,比如:“D:\Keil_v5\ARM\Pack\ARM\CMSIS\4.3.0\CMSIS”;

2.2拷贝库文件
对于一个项目来说,为了工程的完整性和源文的管理,一般将库文件拷贝到项目工程中文件路径下。这里有两种处理用方法。
 ·使用该目录下的“Lib”库,该文件夹就是FPU相关运算函数库,使用时根据头文件函数名调用库。
 ·使用该目录下的“DSP_Lib”库,该文件夹是FPU相关运算函数库源码,每个浮点运算函数都提供源码,比较好理解和使用。

2.3加入FPU库
  首先将FPU库的路径加入Keil的编译路径中。
  第二步是加入工程,可以全部FPU库函数添加到工程中,但一般根据需要选择性添加使用到的函数库,提高编译速度和节省空间。鄙人暂时用到标准差( standard deviation)和平均值(mean)运算函数,所以仅添加两函数。另外,从命名看,ARM的命名规则比较易懂,基本上看函数名称即可知道该函数的功能,如标准差运算函数arm_std_f32,平均值运算函数arm_mean_f32,等都是以对应术语的英文名称命名。
2.4开启FPU
  使能浮点运算,在工程设置中“option for target” 中开启浮点运算功能。

加入FPU库的宏“ARM_MATH_CM4”定义。

2.5使用FPU   使用前,需要在文件头加入浮点库函数头文件,即是#include "arm_math.h",否则编译时可能会提示警告或者编译错误。然后即是根据库函数的参数类型传入对应类型参数调用该函数。

3.总结  实体测试及综合网友的一些实验,关于FPU的几个总结: 1)编译器未开启FPU功能,代码中配置了FPU,程序依然按照未配置FPU的代码进行处理。 2)编译器开启了FPU功能,代码中未配置FPU,如果代码中带有单精度(float)浮点运算的代码,编译器会使用FPU单元汇编指令,无论芯片是否开启了FPU功能。除非用户在代码中关闭了FPU功能,此时程序执行会出错,直接进入HardFault_Handle。 3)Cortex M4默认的开启浮点运算功能的,但目前M4只支持单精度浮点运算,单精度浮点运算对于大部分场合来说已经足够使用。 4)一般情况下,编译器对于小数处理默认是双精度(double)类型,所以在涉及小数运算时,若要使用FPU功能,应该指定为单精度类型,如:float a = 1.23f * 2.34f。


使用特权

评论回复
沙发
szt1993| | 2024-6-30 08:31 | 只看该作者
浮点库精度如何?

使用特权

评论回复
板凳
sj8zw8| | 2024-6-30 21:18 | 只看该作者
·对于Keil4,库文件在路径:“…\Keil\ARM\CMSIS”
 ·对于Keil5,库文件在路径:“…\Keil_v5\ARM\Pack\ARM\CMSIS\4.3.0\CMSIS”,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

1139

帖子

2

粉丝