首页 > 评测 > 极海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次浮点运算前后的计数值来计算所用时间。
复制代码复制代码使用串口就能打印输出浮点运算值和所用时间。
输入角度为10°时的结果。
输入角度为120°的结果:
从计算结果来对比看,浮点运算值都还是比较准确的。
APM32E103的FPU对计算效率的提升还是很明显的,目前由于是硬件完成计算,不同的输入值对运算时间基本没有影响。
而使用math.h的sin()和cos()需要转换运算,不同输入值的计算时间都不一样。
整体而言APM32E103的FPU对支持的浮点运算函数,运算的效率和准确性还是很不错的,有比较多浮点运算的场合还是比较合适的。
查看规格书发现,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
- 我要投稿
-
欢迎入驻,开放投稿
行业新闻
-
RAK831 Lite:基于树莓派3的LoRa网关... 2022-06-17
-
Imagination推出PowerVR AX2185和AX2145神经... 2022-06-17
-
ODROID-GO是一款兼容Arduino的基于ESP32的便... 2022-06-17
项目外包
more+
- PID温度控制器
预算:¥700003天前
- 摄像头的可视画面需要一直超上(linux系统,ARM)
预算:¥1000018小时前
- DICOM协议搭建(ARM架构,linux系统)
预算:¥1000017小时前
- 需MIPI摄像头隔离电路,实现3-4米能长距离
预算:¥1000017小时前
- 膨宫仪的控制板,控制流量和检测压力
预算:¥1000016分钟前
- 无创自动测量血压计 NIBP模块
预算:¥100007小时前