[APM32F4]

APM32F407xG FPU——如何在Keil下使用内核自带的FPU

[复制链接]
386|0
手机看帖
扫描二维码
随时随地手机跟帖
zjh20070904|  楼主 | 2022-5-20 14:34 | 显示全部楼层 |阅读模式
本帖最后由 zjh20070904 于 2022-5-20 14:36 编辑

#申请原创# #技术资源#
APM32F407xG的内核自带FPU,可使用该模块在处理浮点运算时加快运算速度,以下总结、记录了如何在Keil下使用FPU,并通过1000次 sin运算对比使用FPU、不使用FPU的运算速率差异。
1 找到arm_cortexm4lf_math.lib文件
C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS\Lib\ARM
Keil_v5的安装路径因电脑而异)
1.png

各类库文件的差异如下:
- arm-cortexM4b_math.lib(M4内核的大端模式)
- arm_cortexM4bf_math.lib (M4内核的大端模式,浮点单元)
- arm_cortexM4l_math.lib (M4内核的小端模式)
- arm_cortexM4lf_math.lib (M4内核的小端模式,浮点单元)
MCU是小端模式,在此使用浮点单元,因此选择arm_cortexM4lf_math.lib

另外:C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS有源文件、例程
2.png


2 arm_cortexM4lf_math.lib复制到FPU的工程目录下,并添加到工程中

3.png

4.png

3 复制arm_math.h头文件
C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS\Include
5.png



arm_math.h添加至工程中
6.png




4 配置Keil工程4.1 配置Keil工程,选择使用FPU 7.png


4.2 添加以下宏定义
ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,ARM_MATH_CM4,__CC_ARM
8.png



宏定义的解释(摘录网上的资料)如下:
(1)  ARM_MATH_MATRIX_CHECK
是库函数的参数检查开关,这里添加后,就打开。
(2)  ARM_MATH_ROUNDING
这个是库函数在运算是是否开启四舍五入的功能,我这里添加,可以根据自己的需要进行配置。
(3)  ARM_MATH_CM4
这个就非常重要,必须要配置进去,否则在编译之后,会默认使用math.h的库函数,而不会用到硬件的FPU的。
(4)  __CC_ARM
是不同编译器的编译配置宏定义,
(5)  __CC_ARM
就是代表MDK开发环境。
4.3 包含头文件arm_math.h路径
(路径因工程而异)

5 编写测试函数
参考测试代码如下:
#include "arm_math.h"

void float_test(void)
{
     floata=1.2345, sum = 0;
     int i=0;
     for(i=0;i<1000;i++)
     {
         sum= sum+a;
     }
}


extern float32_t arm_sin_f32(float32_t x);

void float_sin_test(void)
{
     int i=0;
     float32_ta[1000]={0};
     float32_tresult=0;

     for(i=1;i<1000;i++)
     {a=PI/i;}
     result=0;//方便设置断点
     for(i=1;i<1000;i++)
     {result=arm_sin_f32(a);}
}


int main(void)
{
     float_sin_test();

     while(1);
}
6 对比使用、不使用FPU的计算速率6.1 设置断点,记录计算sin使用的States数量
9.png

6.2 使用FPU

10.png


消耗的States=98029-38868=59161

6.3 不使用FPU6.3.1 需要重新调整Keil的配置
1)添加arm_cortexM4l_math.lib文件
11.png

2)配置Keil工程


12.png

3)清除编译内容,设置断点,记录states数据如下

13.png
消耗的States=424446-97027=327419

6.4 总结
  
使用FPU
  
消耗的States59161
不使用FPU
消耗的States327419
结论
使用FPU比不使用FPU快了约5.5
(不同的代码及编译器版本及优化级别都可能对结果产生差异)

参考工程如下:
APM32F4xx_SDK_V1.1_FPU.zip (10.18 MB)

使用特权

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

本版积分规则

认证:极海半导体
简介:珠海极海半导体有限公司是一家致力于开发工业级/车规级微控制器、模拟与混合信号IC及系统级芯片的集成电路设计型企业。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。

29

主题

68

帖子

0

粉丝