www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

首頁 > 評測 > 極海E103 FPU浮點(diǎn)運(yùn)算性能簡單測試

極海E103 FPU浮點(diǎn)運(yùn)算性能簡單測試

  
  • 作者:
  • 來源:
  • [導(dǎo)讀]
  • #申請?jiān)瓌?chuàng)# #技術(shù)資源# 查看規(guī)格書發(fā)現(xiàn),APM32E103系列除了可以兼容STM32F103系列外,還增加了一些外設(shè)功能。比如FPU、CAN2、外擴(kuò)SDRAM等。 其中FPU(浮點(diǎn)運(yùn)算單元)一般是在M4內(nèi)核的芯片上才有的,可以大大提升浮
#申請?jiān)瓌?chuàng)# #技術(shù)資源#
查看規(guī)格書發(fā)現(xiàn),APM32E103系列除了可以兼容STM32F103系列外,還增加了一些外設(shè)功能。比如FPU、CAN2、外擴(kuò)SDRAM等。
其中FPU(浮點(diǎn)運(yùn)算單元)一般是在M4內(nèi)核的芯片上才有的,可以大大提升浮點(diǎn)數(shù)的運(yùn)算效率。
查看手冊和SDK發(fā)現(xiàn),APM32E103的FPU使用上是與M4內(nèi)核自帶的FPU有區(qū)別的,需要像使用外設(shè)一樣開啟時(shí)鐘,調(diào)用封裝好的庫函數(shù)。
FPU庫的sc_math.h中聲明了能使用的浮點(diǎn)運(yùn)算函數(shù)。

C語言中進(jìn)行浮點(diǎn)運(yùn)算,可以調(diào)用math.h來進(jìn)行浮點(diǎn)計(jì)算。
接下來就簡單對比測試下APM32E103的FPU與math.h中進(jìn)行同樣的sin()和cos運(yùn)算,看計(jì)算時(shí)間分別是多少。

計(jì)算思路就是通過先清零TMR5計(jì)數(shù)值,讀進(jìn)行100次浮點(diǎn)運(yùn)算前后的計(jì)數(shù)值來計(jì)算所用時(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ù)制代碼
使用串口就能打印輸出浮點(diǎn)運(yùn)算值和所用時(shí)間。
輸入角度為10°時(shí)的結(jié)果。

輸入角度為120°的結(jié)果:

從計(jì)算結(jié)果來對比看,浮點(diǎn)運(yùn)算值都還是比較準(zhǔn)確的。
APM32E103的FPU對計(jì)算效率的提升還是很明顯的,目前由于是硬件完成計(jì)算,不同的輸入值對運(yùn)算時(shí)間基本沒有影響。
而使用math.h的sin()和cos()需要轉(zhuǎn)換運(yùn)算,不同輸入值的計(jì)算時(shí)間都不一樣。
整體而言APM32E103的FPU對支持的浮點(diǎn)運(yùn)算函數(shù),運(yùn)算的效率和準(zhǔn)確性還是很不錯(cuò)的,有比較多浮點(diǎn)運(yùn)算的場合還是比較合適的。
  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

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