STM32L476 FPU 執行效率之比較淺析

2021-02-13 STM32單片機


1.前言

本應用筆記基於STM32L476平臺,通過實際測量來評定使能FPU時浮點運算效率的情況。

2.測試工具

STM32L476 Nucleo,示波器

3.測試方法

MCU 運行頻率設置為16MHz,根據下面公式1 做N 次浮點運算,分使能FPU和禁止FPU兩種情況,測試完成相同運算所需要的時間。在例程中通過翻轉IO PB13 來標定完成運算所需要的時間。

3.1 測試代碼

根據公式1,分別定義A、B、C 三個常量,如下:

/* Private constants--*/

#define A_CONSTANT(0.285f)

#define B_CONSTANT(0.443f)

#define C_CONSTANT(0.698f)

根據公式做對應的運算並通過GPIOC Pin0 輸出,測定對應消耗時間:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13, GPIO_PIN_SET);

temp = A_CONSTANT*x*x +B_CONSTANT*x + C_CONSTANT;

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13, GPIO_PIN_RESET);

3.2 代碼分析

根據測試用的一元二次方程,經過IAR 編譯後,彙編結果如下:

3.2.1 FPU 使能

從彙編代碼可以看出,使能FPU 的情況下,完成一元二次方程的運算只需要7 條單周期指令,總共耗時為7 個Clock 周期。通過IAR 的方針模式運行,需要的CPU cycles 為7.


3.2.2 FPU 禁止

從彙編代碼可以看出,未使能FPU 的情況下,完成該一元二次方程的運算需要執行14 條指令,其中包括3 條兩周期指令,6 條單周期指令,5 條程序跳轉指令。通過IAR 的方針模式運行,需要的CPU cycles 為207.

4.測試數據及結論

IO完成兩次翻轉耗時6.48 uS;

使能FPU 時,除去IO 翻轉耗時,完成一次運算時間為6.52 uS(13 uS -6.48 uS),

如下圖示:


禁止FPU 時,除去IO 翻轉耗時,完成一次運算時間為87.4 uS(93.88 uS -6.48 uS),如下圖示:

小結下,根據上面相關測試數據大致可得出如下結論:

• 完成同樣的一元二次方程運算,禁止FPU時所消耗的時間約為使能FPU時消耗時間的13.4 倍左右。

                     **********The End **********


更多信息,請點擊本公眾號菜單選擇閱讀。

相關焦點

  • [原創]STM32L476RG Nuleo 評測
    下面從以下幾方面來開始STM32L476RG Nuleo產品評測:系列化晶片和資料概述STM32L476RG晶片介紹STM32L476RG Nuleo板子硬體介紹開發環境之STM32CUBEMX使用開發環境之MDK使用開發環境之 IAR使用開發環境之MBED跑程序低功耗測試
  • 簡評STM32L476-NUCLEO
    這周一收到了論壇寄給的STM32L476-NUCLEO評估板,上電看到LED在閃爍: 這幾天就忙著網上搜資料,查相關的知識,業餘時間有限,先簡單說明幾點: 1、L476的編譯器:在這先說明一下,STM32L476-NUCLEO的編譯我使用的IAR,STM32L476實在是太新了
  • 編輯推薦 沒有最低,只有更低——超低功耗STM32L476 NUCLEO評測
    「 前兩天收到二姨家寄來的STM32L476 NUCLEO開發板,板載的STM32L476RGT6微控制器是ST公司推出的一款集高性能與低功耗特性於一體的
  • STM32L0晶片FLASH編程示例及提醒
    STM32L0晶片的擦除除了支持全片擦除外,再就是支持頁擦除,每頁的大小為128Bytes,即32個字。編程可以按字或按半頁【64Bytes】編程。單頁擦除、單字編程以及半頁編程的時間都是一樣的,大概3.2ms左右,這點在晶片數據手冊上也明確出來了。
  • 技術筆記-STM32CubeL4 固件庫V1.13.0版的RTC喚醒
    為進一步確認問題,使用另一版本的固件庫的相關例程\STM32Cube_FW_L4_V1.12.0\Projects\NUCLEO-L476RG\Examples\PWR\PWR_STOP2_RTC進行驗證,結果卻發現功能是正常的。難道客戶描述有誤?下載跟客戶相同的STM32CubeL4版本庫,即用STM32Cube_FW_L4_V1.13.0來進行驗證,發現客戶描述的問題確實存在。
  • STM32L432KC 測評
    至於Nucleo-l432kc的性能說明,官網都有。我就不搬磚過來啦。STM32L432KC  官網介紹  從以上兩個不同型號的Nucleo-32板外觀的對比,我們可以發現兩個不同之處:a、那就是Nucleo-L432K多了X1;從原理圖看就是如下紅色方框中的X1.
  • 基於stm32L4R9體驗ewebengine
    1.stm32L4r9平臺ST公司的STM32L4R9I是高性能超低功耗MCU系列產品,基於Arm Cortex-M4 32位RISC核,工作頻率高達
  • STM32F7開發板自己造
    編譯:/mnt/e/_make_/arm/stm32f746z/test# makearm gcc -c -g -O2 -Wall -mcpu=cortex-m7 -mthumb -DSTM32F746xx -I../../ST -I../../CMSIS test.carm gcc -nostdlib -mcpu=cortex-m7 -mthumb -T ..
  • 最近STM32CubeMX、IDE、Programmer都更新了些什麼內容
    STM32CubeMX V5.3.0 -> V5.4.0STM32CubeIDE V1.0.2 -> V1.1.0STM32CubeProgrammer V2.1.0 -> V2.2.0https://www.st.com/en/development-tools/stm32cubemx.html
  • STM32CubeMonitor介紹、下載、安裝和使用教程
    •關注感興趣的應用行為•允許將數據記錄到文件中並重播以進行詳盡的分析•通過可配置的顯示窗口(如曲線和方框)和大量的小部件(如儀表、條形圖和圖表)提供定製的可視化多探頭支持同時監控多個目標•遠程監控,本機支持多格式顯示(PC、平板電腦、手機)•直接支持Node-RED開放社區•支持作業系統:Windows,Linux Ubuntu
  • 新一代超低功耗STM32U5,到底有啥亮點?
    參考地址:https://blog.st.com/stm32u5-microvisor/STM32Lx系列為STM32早期的超低功耗系列MCU,最早的一款STM32L系列為STM32L1,於2009年發布。STM32Lx系列前後推出了STM32L1、 STM32L0、 STM32L4、 STM32L4+、 STM32L5等幾個系列,多種型號的低功耗MCU。
  • STM32F1_外部SRAM作為運行內存
    今天提供的工程是基於前面「TIM延時」的工程修改而來,但是今天的例子是使用ST官方提供的標準庫裡面「system_stm32f10x.c」文件裡面現成的函數接口(使用寄存器配置),使其控制外部SRAM作為運行內存。昨天的工程使用標準庫fsmc相應的函數接口來配置的FSMC,昨天工程的目的就是為了使其大家熟悉參數信息。
  • STM32CubeMX重大升級
    一些關於STM32CubeMX升級、ST官網的細節問題,不知道大家平時注意了沒有?相信經常使用STM32CubeMX工具的朋友,都知道升級到V5.0.0版本的新聞。其實,經常使用STM32CubeMX工具的朋友可能會關注它版本的更新。
  • STM32CubeMX介紹、下載與安裝
    Ⅰ、寫在前面相信很多人都知道STM32CubeMX這個工具,也是近年來開發STM32比較流行的一個工具。
  • 關於STM32Cube的幾個常見問題
    四、STM32Cube HAL庫可以使用中斷或DMA嗎?答:是的。HAL層支持三種 API編程模型:輪詢、中斷和DMA(帶或不帶中斷的產生)。五、有基於相關開發工具鏈的工程例程嗎?答:有的。stm32cube各系列固件包提供了豐富的應用例程。
  • STM32CubeMX教程-GPIO輸入之外部中斷
    GPIO外部中斷輸入檢測,實際物理輸入方式是按鍵,但是實際上更適合外部設備信號的輸入檢測,物理按鍵輸入因為有抖動,還需要硬體或者軟體去抖才比較可靠。軟體版本:STM32CubeMX V4.25.0  System Workbench V2.4硬體:OneNet 麒麟座V2.3    在STM32CubeMX中新建項目,選擇正確的MCU型號     設置RCC和SYS,然後根據板子實際情況設置時鐘
  • STM32CubeIDE使用入門的幾個常見問題
    2、安裝STM32cubeIde有時總不成功怎麼辦?最常見的問題就是路徑上有中文字符。另外,如果不是首次安裝STM32CUBEIDE的話,記得將之前版本的東西卸載乾淨。3、它支持與圖形化配置工具stm32CubeMx的協調工作否?當然。可以說STM32cubeIde已經將stm32CubeMx作為一個模塊嵌入其開發環境中了。我們在通過CubeIDE新建工程時,會自動調用stm32CubeMx進來,讓用戶進行圖形化初始配置。
  • stm32h7「資源尋找介紹」
    stm32h7開發資源分為開發文檔、軟體包、開發工具。
  • STM32f103單片機(三)——串口
    在stm32f10x.h中添加函數void UART_TRxOver_Interrupt(void);在stm32f10x.c的串口中斷入口中添加UART_TRxOver_Interrupt();
  • STM32CubeMx入門教程(1)-點亮LED
    「 使用stm32cubeMX 工具進行代碼生成,以LED點燈為例」