首頁 > 評測 > 極海E103 FPU浮點運算性能簡單測試
極海E103 FPU浮點運算性能簡單測試
- [導(dǎo)讀]
- #申請原創(chuàng)# #技術(shù)資源# 查看規(guī)格書發(fā)現(xiàn),APM32E103系列除了可以兼容STM32F103系列外,還增加了一些外設(shè)功能。比如FPU、CAN2、外擴SDRAM等。 其中FPU(浮點運算單元)一般是在M4內(nèi)核的芯片上才有的,可以大大提升浮
查看規(guī)格書發(fā)現(xiàn),APM32E103系列除了可以兼容STM32F103系列外,還增加了一些外設(shè)功能。比如FPU、CAN2、外擴SDRAM等。
其中FPU(浮點運算單元)一般是在M4內(nèi)核的芯片上才有的,可以大大提升浮點數(shù)的運算效率。
查看手冊和SDK發(fā)現(xiàn),APM32E103的FPU使用上是與M4內(nèi)核自帶的FPU有區(qū)別的,需要像使用外設(shè)一樣開啟時鐘,調(diào)用封裝好的庫函數(shù)。
FPU庫的sc_math.h中聲明了能使用的浮點運算函數(shù)。
C語言中進(jìn)行浮點運算,可以調(diào)用math.h來進(jìn)行浮點計算。
接下來就簡單對比測試下APM32E103的FPU與math.h中進(jìn)行同樣的sin()和cos運算,看計算時間分別是多少。
計算思路就是通過先清零TMR5計數(shù)值,讀進(jìn)行100次浮點運算前后的計數(shù)值來計算所用時間。
- 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°時的結(jié)果。
輸入角度為120°的結(jié)果:
從計算結(jié)果來對比看,浮點運算值都還是比較準(zhǔn)確的。
APM32E103的FPU對計算效率的提升還是很明顯的,目前由于是硬件完成計算,不同的輸入值對運算時間基本沒有影響。
而使用math.h的sin()和cos()需要轉(zhuǎn)換運算,不同輸入值的計算時間都不一樣。
整體而言APM32E103的FPU對支持的浮點運算函數(shù),運算的效率和準(zhǔn)確性還是很不錯的,有比較多浮點運算的場合還是比較合適的。
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達(dá)中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標(biāo)準(zhǔn)編制 2024-08-29
- NRF52810藍(lán)牙數(shù)字耳機找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設(shè)計
預(yù)算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時前
- PLC項目調(diào)試修改
預(yù)算:¥100001天前
- 起動電機控制器開發(fā)
預(yù)算:¥1100001天前