來源:轉載自21ic論壇極海半導體專區
1、前言
APM32F411是一款基于32位Arm Cortex-M4F內核的微控制器。硬件FPU是Arm Cortex-M4F的一大優勢。合理應用硬件FPU可以大大縮短運算時間。
2、如何開啟硬件FPU
在system_apm32f4xx.c文件的SystemInit()函數里,有下圖所示語句:
當__FPU_PRESENT(是否帶有FPU)和__FPU_USED(是否開啟FPU)都為1時,硬件FPU才算成功開啟。
從M4權威指南手冊可以查到,SCB->CPACR的寄存器信息如下圖所示:
實際應用中,CP10和CP11一般都設置為11。
KEIL軟件提供了一個非常方便的開啟硬件FPU功能選項。如下圖所示,點擊KEIL的“魔法棒”菜單。“Target”界面中的“Floating Point Hardware”選項選擇“Single Precision”。點擊“OK”,完成硬件FPU開啟。
3、測試
通過實例測試,感受一下硬件FPU的運算速度。根據極海官網APM32F4xx_SDK_V1.4的的GPIO_Toggle例程修改,APM32F411系統時鐘設置為100MHz。
3.1 開啟和不開啟FPU測試
部分測試代碼,如下圖所示。主函數包括兩個函數:LED2(PE6)引腳翻轉函數和測試函數。測試函數主要內容是重復執行200次data_b = data_a * 3.14159的乘法運算。
通過邏輯分析儀抓取PE6的高低電平,評估代碼執行時間。
不開啟硬件FPU的IO翻轉時間約207.56us,如下圖所示。
開啟硬件FPU的IO翻轉時間約218.64us,如下圖所示。
什么情況?開啟硬件FPU的運算時間居然比不開啟硬件FPU的運算時間要慢。
很多人使用M4/M4F產品,往往會忽略一個細節。參與運算的浮點型常量3.14159在C語言中默認是double類型常量。M4/M4F的硬件FPU只對單精度浮點數運算加速。所以,對double類型浮點數運算無效。
為什么開啟硬件FPU的運算時間比不開啟硬件FPU的運算時間要慢?我們從匯編代碼可以看出,同樣的一條乘法運算語句,不開啟硬件FPU計算需要10816 - 10627 = 189個機器周期,開啟硬件FPU計算需要10883 - 10692 = 191個機器周期,差了2個機器周期。
不開啟硬件FPU的乘法運算匯編代碼及機器周期數如下圖所示:
開啟硬件FPU的乘法運算匯編代碼及機器周期數如下圖所示:
3.2 浮點型常量都加f后綴,開啟和不開啟FPU測試。
float類型數值取值范圍是
-3.402823466×1038~3.402823466×1038,可以滿足大部分應用。測試代碼的浮點型常量加上后綴f,其他內容與3.1章節一致,如下圖所示。
不開啟硬件FPU的IO翻轉時間約73.48us,如下圖所示。
開啟硬件FPU的IO翻轉時間約16.4us,如下圖所示。
這才是我們想要的效果。從匯編代碼對比,同樣的一條乘法運算語句,不開啟硬件FPU計算需要10737 - 10677 = 60個機器周期,開啟硬件FPU計算需要11176 - 11165 = 11個機器周期,差了49個機器周期。
不開啟硬件FPU的乘法運算匯編代碼及機器周期數,如下圖所示:
開啟硬件FPU的乘法運算匯編代碼及機器周期數,如下圖所示:
4、結論
測試結果如下表所示
硬件FPU | 浮點型常量 | 運行時間 | data_b = data_a * 3.14159運算時間 |
不開啟 | 不帶f后綴 | 207.56us | 189個機器周期 |
不開啟 | 帶f后綴 | 73.48us | 60個機器周期 |
開啟 | 不帶f后綴 | 218.64us | 191個機器周期 |
開啟 | 帶f后綴 | 16.4us | 11個機器周期 |
計算沒有超出float類型數值取值范圍的情況,建議浮點型常量都加上后綴f,可以縮短運算時間。如果沒有float類型數值運算,可以不開啟硬件FPU。
對于float類型數值運算,建議開啟硬件FPU,可以大大縮短運算時間。比如,該例程的語句乘法運算,開啟硬件FPU的運算比未開啟硬件FPU的運算少了49個機器周期數,運算時間提升約81.67%。
注:文章作者在原帖中提供了例程文件,有需要請至原文21ic論壇下載
原文地址:https://bbs.21ic.com/icview-3329150-1-1.html
-
微控制器
+關注
關注
48文章
7933瀏覽量
154049 -
ARM
+關注
關注
134文章
9340瀏覽量
376112 -
內核
+關注
關注
3文章
1415瀏覽量
41243 -
函數
+關注
關注
3文章
4377瀏覽量
64540 -
極海半導體
+關注
關注
0文章
158瀏覽量
4825
原文標題:APM32芯得 EP.58 | APM32F411硬件FPU使用方法及注意點
文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
基于APM32F411 DMA_ADC Handler模式分析及解決

正式發布 | 極海APM32F411系列高適配型MCU,均衡功耗、性能與成本

充能新時代 | 基于APM32F411的EV交流充電樁應用方案

TinyMaix框架的內存需求超過了APM32F411的可用內存,導致運行失敗,怎么能成功優化?
STM32F411xC和STM32F411XE微控制器的數據手冊免費下載

32位微控制器APM32F405xG/APM32F407xExG
支持燒錄Geehy極海半導體的32位微控制器APM32F407RET6

極海半導體推出APM32F411系列高性能高適配型MCU

評論