首页 > 评测 > 极海E103 FPU浮点运算性能简单测试
极海E103 FPU浮点运算性能简单测试
- [导读]
- #申请原创# #技术资源# 查看规格书发现,APM32E103系列除了可以兼容STM32F103系列外,还增加了一些外设功能。比如FPU、CAN2、外扩SDRAM等。 其中FPU(浮点运算单元)一般是在M4内核的芯片上才有的,可以大大提升浮
查看规格书发现,APM32E103系列除了可以兼容STM32F103系列外,还增加了一些外设功能。比如FPU、CAN2、外扩SDRAM等。
其中FPU(浮点运算单元)一般是在M4内核的芯片上才有的,可以大大提升浮点数的运算效率。
查看手册和SDK发现,APM32E103的FPU使用上是与M4内核自带的FPU有区别的,需要像使用外设一样开启时钟,调用封装好的库函数。
FPU库的sc_math.h中声明了能使用的浮点运算函数。
C语言中进行浮点运算,可以调用math.h来进行浮点计算。
接下来就简单对比测试下APM32E103的FPU与math.h中进行同样的sin()和cos运算,看计算时间分别是多少。
计算思路就是通过先清零TMR5计数值,读进行100次浮点运算前后的计数值来计算所用时间。
- void TMR5_Init(void)
- {
- TMR_BaseConfig_T TMR_BaseConfigStruct;
- RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR5);
- TMR_BaseConfigStruct.clockDivision = TMR_CLOCK_DIV_1;
- TMR_BaseConfigStruct.countMode = TMR_COUNTER_MODE_UP;
- TMR_BaseConfigStruct.division = 7;
- TMR_BaseConfigStruct.period = 0xFFFF;
- TMR_BaseConfigStruct.repetitionCounter = 0;
- TMR_ConfigTimeBase(TMR5, &TMR_BaseConfigStruct);
- TMR_Enable(TMR5);
- }
- int main(void)
- {
- RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_FPU);
- RCM->CFG |= BIT27;
- TMR5_Init();
- Usart_Init();
-
- a=10*PI/180;
-
- printf("Angle=%5.11f\r\n",a);
-
- TMR_ConfigCounter(TMR5,0);
-
- m=TMR_ReadCounter(TMR5);
- for (s = 0; s < 100; s++)
- {
- ans[0] = sc_math_sin(a);//FPU sin()
- }
- n=TMR_ReadCounter(TMR5);
- printf("\r\nAPM32 FPU SIN(): %5.11f\r\n", ans[0]);
- printf("Time:%d\r\n",(n-m));
- TMR_ConfigCounter(TMR5,0);
- m=TMR_ReadCounter(TMR5);
- for (s = 0; s < 100; s++)
- {
- ans[1] = sin(a);//math.h SIN()
- }
- n=TMR_ReadCounter(TMR5);
- printf("\r\nC math.h SIN(): %5.11f\r\n", ans[1]);
- printf("Time:%d\r\n",(n-m));
-
- TMR_ConfigCounter(TMR5,0);
- m=TMR_ReadCounter(TMR5);
- for (s = 0; s < 100; s++)
- {
- ans[0] = sc_math_cos(a);//FPU cos()
- }
- n=TMR_ReadCounter(TMR5);
- printf("\r\nAPM32 FPU COS(): %5.11f\r\n", ans[0]);
- printf("Time:%d\r\n",(n-m));
- TMR_ConfigCounter(TMR5,0);
- m=TMR_ReadCounter(TMR5);
- for (s = 0; s < 100; s++)
- {
- ans[1] = cos(a);//math.h cos()
- }
- n=TMR_ReadCounter(TMR5);
- printf("\r\nC math.h COS(): %5.11f\r\n", ans[1]);
- printf("Time:%d\r\n",(n-m));
-
-
- }
输入角度为10°时的结果。
输入角度为120°的结果:
从计算结果来对比看,浮点运算值都还是比较准确的。
APM32E103的FPU对计算效率的提升还是很明显的,目前由于是硬件完成计算,不同的输入值对运算时间基本没有影响。
而使用math.h的sin()和cos()需要转换运算,不同输入值的计算时间都不一样。
整体而言APM32E103的FPU对支持的浮点运算函数,运算的效率和准确性还是很不错的,有比较多浮点运算的场合还是比较合适的。
- 本文系21ic原创,未经许可禁止转载!
网友评论
- 联系人:巧克力娃娃
- 邮箱:board@21ic.com
- 我要投稿
-
欢迎入驻,开放投稿
-
人均百万?英伟达中国员工收入曝光! 2024-08-29
-
《黑神话:悟空》玩家硬盘升级攻略:提升游戏体验,畅享3A大作 2024-08-29
-
数睿数据参加《系统与软件工程 低代码开发平台通用技术要求》国家标准编制 2024-08-29
- NRF52810蓝牙数字耳机找人定制
预算:¥30005天前
- 125KW模块式PCS软硬件外包开发
预算:¥1100000015小时前
- 12V汽车启动电源项目BMS设计
预算:¥50000023小时前
- 数据可视化软件 开发
预算:¥5000023小时前
- PLC项目调试修改
预算:¥100001天前
- 起动电机控制器开发
预算:¥1100001天前