你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比

[复制链接]
秋刀鱼的 发布时间:2024-12-28 23:15

qfplib次用汇编实现,是一种用来在ARM 单片机上运行的软件浮点库,适用于ARM Cortex- M0/M0+/M1/M23/M3/M4/M7/M33/M55等ARM MCU,特别是适用于M0/M0+,因为这些和是不具备硬件浮点运算的,本期测评主要是在STM32F769I-DISCO上测试。

1。首先下载qfplib

https://www.quinapalus.com/qfplib.html

image.png

我们点击M3

image.png

进行下载

复制到工程文件夹

image.png

2。打开我们之前建立好的串口工程,串口打印这里不在赘述。

image.png

添加这两个,上面是用来测量算法时间,下面是qfplib

image.png

同时添加文件

image.png

3。main文件中进行修改

添加头文件

include "main.h"

/ Private includes ----------------------------------------------------------/ / USER CODE BEGIN Includes /

include "stdio.h"

include "code_time_measurement.h"

include "qfplib-m3.h"

include "math.h"

image.png

4。先进性qfplib浮点库性能测试,修改代码如下

printf("======================qfplib==========================\r\n"); CODE_TIME_START("qfplib浮点运算"); printf("qfp_fsqrt = %f\r\n", qfp_fsqrt(3.4f));

CODE_TIME_EVENT("qfp_fsqrt(3.4f)"); printf("qfp_fexp = %f\r\n", qfp_fexp(4.124f));

CODE_TIME_EVENT("qfp_fexp(4.124f)"); printf("qfp_fln = %f\r\n", qfp_fln(88.124f));

CODE_TIME_EVENT("qfp_fln(88.124f)"); printf("qfp_fsin = %f\r\n", qfp_fsin(3.1415926f/4));

CODE_TIME_EVENT("qfp_fsin(3.1415926f/4)"); printf("qfp_fcos = %f\r\n", qfp_fcos(3.1415926f/4));

CODE_TIME_EVENT("qfp_fcos(3.1415926f/4)"); printf("qfp_ftan = %f\r\n", qfp_ftan(3.1415926f/4)); CODE_TIME_EVENT("qfp_ftan(3.1415926f/4)");

printf("qfp_fatan2 = %f\r\n", qfp_fatan2(1.0f, 2.0f)); CODE_TIME_EVENT("qfp_fatan2(1.0f, 2.0f)");

CODE_TIME_STOP();

image.png

image.png

一定要关闭硬件浮点运算,操作如上图

串口打印如下图

image.png

5。进行硬件浮点运算,修改代码如下

printf("======================hardfpu==========================\r\n"); CODE_TIME_START("硬件浮点运算"); printf("sqrtf = %f\r\n", sqrtf(3.4f)); CODE_TIME_EVENT("sqrtf(3.4f)"); printf("expf = %f\r\n", expf(4.124f)); CODE_TIME_EVENT("expf(4.124f)"); printf("logf = %f\r\n", logf(88.124f)); CODE_TIME_EVENT("logf(88.124f)"); printf("sinf = %f\r\n", sinf(3.1415926f/4)); CODE_TIME_EVENT("sinf(3.1415926f/4)"); printf("cosf = %f\r\n", cosf(3.1415926f/4)); CODE_TIME_EVENT("cosf(3.1415926f/4)"); printf("tanf = %f\r\n", tanf(3.1415926f/4)); CODE_TIME_EVENT("tanf(3.1415926f/4)"); printf("atan2f = %f\r\n", atan2f(1.0f, 2.0f)); CODE_TIME_EVENT("atan2f(1.0f, 2.0f)");

CODE_TIME_STOP();

image.png

同时使能硬件浮点运算

image.png

串口打印输出

image.png

6。两者进行对比

image.png

发现qfplib的浮点运行性能和硬件浮点运算性能相差无几,几乎达到了硬件浮点性能,这使得在M0/M0+/M1/M2等不具备硬件浮点运算的ARM内核可以运行浮点运算,非常完美的库!!!!

大家可以下载移植测试!!!!!!!!!!!!!!!!!

image.png
image.png
收藏 评论0 发布时间:2024-12-28 23:15

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版