首頁 > 評測 > 極海E103 FPU浮點運算性能簡單測試

極海E103 FPU浮點運算性能簡單測試

  
  • 作者:
  • 來源:
  • [導(dǎo)讀]
  • #申請原創(chuàng)# #技術(shù)資源# 查看規(guī)格書發(fā)現(xiàn),APM32E103系列除了可以兼容STM32F103系列外,還增加了一些外設(shè)功能。比如FPU、CAN2、外擴SDRAM等。 其中FPU(浮點運算單元)一般是在M4內(nèi)核的芯片上才有的,可以大大提升浮
#申請原創(chuàng)# #技術(shù)資源#
查看規(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ù)值來計算所用時間。
  1. void TMR5_Init(void)
  2. {
  3.     TMR_BaseConfig_T TMR_BaseConfigStruct;

  4.     RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR5);

  5.     TMR_BaseConfigStruct.clockDivision = TMR_CLOCK_DIV_1;
  6.     TMR_BaseConfigStruct.countMode = TMR_COUNTER_MODE_UP;
  7.     TMR_BaseConfigStruct.division = 7;
  8.     TMR_BaseConfigStruct.period = 0xFFFF;
  9.     TMR_BaseConfigStruct.repetitionCounter = 0;
  10.     TMR_ConfigTimeBase(TMR5, &TMR_BaseConfigStruct);


  11.     TMR_Enable(TMR5);
  12. }
復(fù)制代碼
  1. int main(void)
  2. {
  3.     RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_FPU);
  4.     RCM->CFG |= BIT27;

  5.                 TMR5_Init();
  6.                 Usart_Init();
  7.                
  8.                 a=10*PI/180;
  9.                
  10.                 printf("Angle=%5.11f\r\n",a);
  11.                
  12.                 TMR_ConfigCounter(TMR5,0);
  13.                
  14.                 m=TMR_ReadCounter(TMR5);
  15.                                 for (s = 0; s < 100; s++)
  16.                         {
  17.                                 ans[0] = sc_math_sin(a);//FPU sin()
  18.                         }
  19.                 n=TMR_ReadCounter(TMR5);
  20.                 printf("\r\nAPM32 FPU SIN(): %5.11f\r\n", ans[0]);
  21.                 printf("Time:%d\r\n",(n-m));


  22.                         TMR_ConfigCounter(TMR5,0);
  23.                         m=TMR_ReadCounter(TMR5);
  24.                                                 for (s = 0; s < 100; s++)
  25.                         {
  26.                                 ans[1] = sin(a);//math.h SIN()
  27.                         }
  28.                         n=TMR_ReadCounter(TMR5);
  29.                         printf("\r\nC math.h SIN(): %5.11f\r\n", ans[1]);
  30.                         printf("Time:%d\r\n",(n-m));
  31.                        
  32.                 TMR_ConfigCounter(TMR5,0);
  33.                 m=TMR_ReadCounter(TMR5);
  34.                                 for (s = 0; s < 100; s++)
  35.                         {
  36.                                 ans[0] = sc_math_cos(a);//FPU cos()
  37.                         }
  38.                                 n=TMR_ReadCounter(TMR5);
  39.                         printf("\r\nAPM32 FPU COS(): %5.11f\r\n", ans[0]);
  40.                                 printf("Time:%d\r\n",(n-m));


  41.                         TMR_ConfigCounter(TMR5,0);
  42.                         m=TMR_ReadCounter(TMR5);
  43.                                                 for (s = 0; s < 100; s++)
  44.                         {
  45.                 ans[1] = cos(a);//math.h cos()
  46.                         }
  47.                                                 n=TMR_ReadCounter(TMR5);
  48.                         printf("\r\nC math.h COS(): %5.11f\r\n", ans[1]);
  49.                         printf("Time:%d\r\n",(n-m));
  50.                        
  51.                        
  52. }
復(fù)制代碼
使用串口就能打印輸出浮點運算值和所用時間。
輸入角度為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
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項目外包 more+