0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32的三種庫函數(shù)代碼效率對比解析

STM32單片機(jī) ? 來源:未知 ? 作者:佚名 ? 2017-11-06 06:49 ? 次閱讀

前言

ST已經(jīng)推出了三種庫函數(shù),以方便客戶快速開發(fā)STM32系列MCU。從最早的標(biāo)準(zhǔn)外設(shè)驅(qū)動庫,到后來的Cube HAL,再到Cube LL以及直接操作寄存器。這幾種庫的代碼效率到底如何呢?本文將針對這個(gè)問題進(jìn)行粗略分析,并提供對比數(shù)據(jù)供大家參考。

問題分析

我們以GPIO翻轉(zhuǎn)、TIM PWM 輸出、ADCDMA 數(shù)據(jù)采集和DMA M2M這四個(gè)常用功能,通過不同的庫函數(shù)來實(shí)現(xiàn)相同功能,最終來對比各個(gè)庫函數(shù)的性能。四個(gè)工程代碼的內(nèi)容簡述如下:

GPIO翻轉(zhuǎn):切換GPIO的輸出電平,其中包含了系統(tǒng)時(shí)鐘初始化和GPIO翻轉(zhuǎn)的代碼。TIM PWM輸出:通過TIM1 的通道1輸出頻率是36KHz的PWM,循環(huán)修改其占空比從25%到50%,其中包含了系統(tǒng)時(shí)鐘初始化、TIM1的初始化和切換占空比的代碼。ADC DMA數(shù)據(jù)采集:通過ADC的模擬通道1,采集100次ADC的結(jié)果,并使用DMA傳輸?shù)降接脩艟彌_區(qū),其中包含了系統(tǒng)時(shí)鐘初始化、ADC初始化和DMA的初始化的代碼。DMA M2M:使用DMA1的通道1,從Flash中傳輸100字節(jié)的數(shù)據(jù)到片內(nèi)的SRAM中。其中包含了系統(tǒng)時(shí)鐘的初始化和DMA的初始化代碼。

主要對比三個(gè)參數(shù)Flash占用量、SRAM占用量執(zhí)行代碼的效率。

Flash和SRAM的占用量可以通過查看IAR生成的*.map文件了解到。

在*.map文件中,會有如上圖的內(nèi)容,其中的readonly code memory加上readonly data memory的和,就是Flash的占用量。而Readwrite data memory的大小即為SRAM的占用量。那么上圖所示的Flash占用量即為3204=3174+30,SRAM占用量即為1032。因用戶堆(Cstack)我們設(shè)置的為1024,所以真正應(yīng)用代碼所占用的SRAM量為8=1032-1024.

代碼的運(yùn)行效率部分,我們是通過IAR提供的內(nèi)核運(yùn)行周期數(shù)(CYCLECONTER)來計(jì)算的。在功能函數(shù)的開始處和結(jié)束處分別設(shè)置斷點(diǎn),兩次內(nèi)核運(yùn)行周期數(shù)的差值,就是此處代碼的運(yùn)行周期。

測試硬件選用了Nucleo-F302評估板。

軟件環(huán)境和庫函數(shù)詳情如下:

? IAR V7.60

? Optimizations Level High (Size)

? STM32CubeMX V4.17

? Create Project with Copy the necessary libraryfiles

? STM32CubeF3 V1.60

? STM32F30x_DSP_StdPeriph_Lib_V1.2.3

? STM32F3xx CMSIS V2.3.0

測試結(jié)果如下:[手機(jī)模式下片可點(diǎn)擊放大觀看]

總體來看,代碼效率與代碼的兼容性及可移植性成反比的規(guī)律是明顯的。Cube LL庫的效率明顯優(yōu)于HAL庫的,幾乎和直接寫寄存器的效率相差無幾。HAL庫函數(shù)因?yàn)橐櫦罢麄€(gè)STM32系列間的代碼高度兼容與可移植性,代碼相對龐大。對于剛接觸STM32的人來說,非常易于上手做些基本的評估和驗(yàn)證,入門快捷。LL庫的出現(xiàn),是對HAL庫的有力補(bǔ)充。相比HAL庫用戶,LL庫用戶需要對MCU及相應(yīng)外設(shè)有更為細(xì)致的了解。

目前,STM32cubeMX不但支持基于HAL庫的初始化文件的生成,也已支持基于LL庫的初始化文件及工程的生成,對于已經(jīng)比較熟悉STM32應(yīng)用或關(guān)注代碼效率的開發(fā)人員來說,可以優(yōu)先考慮使用LL庫。

順便介紹在STM32CubeMx的圖形化界面下,如何選擇使用HAL庫還是LL庫生成初始化文件及相應(yīng)工程。

在CubeMx界面下,做好各個(gè)外設(shè)的選擇及配置后,在ProjectProject SettingAdvanced Settiing如下圖示界面上,你可以選擇要使用的庫類型:HAL/LL.

另外,偶爾人詢問及LL庫在哪里,其實(shí)LL庫函數(shù)跟HAL庫函數(shù)是在同一目錄下。以STM32F4為例,你下載STM32CubeF4解壓后,在類似如下目錄可以看見HAL函數(shù)和LL函數(shù)庫文件。

。。。DriversSTM32F4xx_HAL_DriverSrc


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10915

    瀏覽量

    356751
  • 庫函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    177

    瀏覽量

    33995

原文標(biāo)題:基于不同STM32庫函數(shù)的代碼性能對比

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    解析STM32庫函數(shù)

    本帖最后由 zax1234 于 2012-10-29 22:50 編輯 解析STM32庫函數(shù) 意法半導(dǎo)體在推出 STM32 微控制器之初,也同時(shí)提供了一套完整細(xì)致的固件開發(fā)包,
    發(fā)表于 10-29 22:36

    解析STM32庫函數(shù)

    解析STM32庫函數(shù)
    發(fā)表于 05-12 09:35

    解析STM32庫函數(shù)(轉(zhuǎn))

    解析STM32庫函數(shù)(轉(zhuǎn)) 獻(xiàn)給新手
    發(fā)表于 11-19 08:39

    關(guān)于STM32庫函數(shù)代碼性能對比

    前言ST 已經(jīng)推出了三種庫函數(shù),用以方便客戶快速開發(fā) STM32 系列的 MCU。從最早的標(biāo)準(zhǔn)外設(shè)驅(qū)動庫,到后來的 Cube HAL , 再到 Cube LL,還有直接寫寄存器。這幾種庫的代碼
    發(fā)表于 07-27 14:07

    STM32三種boot模式介紹

    、示例驗(yàn)證總結(jié)參考資料任務(wù)摘要請說明STM32三種Boot模式的差異,并在之前第11-12周“C語言各種變量的存儲地址”作業(yè)代碼基礎(chǔ)上,研究至少兩boot模式下,
    發(fā)表于 12-10 07:46

    STM32庫函數(shù)—點(diǎn)燈實(shí)驗(yàn)_實(shí)驗(yàn)

    概述: 從最簡單的“點(diǎn)燈”實(shí)驗(yàn)入手,涉及到STM32的最基礎(chǔ)最簡單的操作。 實(shí)驗(yàn)?zāi)康模? 本實(shí)驗(yàn)的目的很簡單,就是讓LED亮起來,并閃爍。 通過實(shí)驗(yàn)了解STM32固件函數(shù)庫的使用方法。 本實(shí)驗(yàn)用到以下4個(gè)
    發(fā)表于 02-22 15:45 ?11次下載

    STM32庫函數(shù)代碼自動生成器V1.2

    stm32庫函數(shù)代碼自動生成器是STM32學(xué)習(xí)的小工具。 stm32庫函數(shù)
    發(fā)表于 06-17 17:55 ?0次下載

    STM32庫函數(shù)代碼自動生成器正式版

    STM32庫函數(shù)代碼自動生成器正式版,感興趣的可以看看。
    發(fā)表于 07-13 16:55 ?0次下載

    STM32庫函數(shù)代碼自動生成器正式版

    STM32庫函數(shù)代碼自動生成器正式版 STM32庫函數(shù)代碼自動生成器正式版
    發(fā)表于 07-25 18:52 ?0次下載

    STM32庫函數(shù)代碼自動生成器正式版應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32庫函數(shù)代碼自動生成器正式版應(yīng)用程序免費(fèi)下載。
    發(fā)表于 10-17 16:23 ?0次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>庫函數(shù)</b><b class='flag-5'>代碼</b>自動生成器正式版應(yīng)用程序免費(fèi)下載

    STM32庫函數(shù)代碼自動生成器V1.3應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32庫函數(shù)代碼自動生成器V1.3應(yīng)用程序免費(fèi)下載。
    發(fā)表于 03-04 08:00 ?116次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>庫函數(shù)</b><b class='flag-5'>代碼</b>自動生成器V1.3應(yīng)用程序免費(fèi)下載

    STM32庫函數(shù)代碼自動生成器V1.2應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32庫函數(shù)代碼自動生成器V1.2應(yīng)用程序免費(fèi)下載。
    發(fā)表于 10-24 17:30 ?50次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>庫函數(shù)</b><b class='flag-5'>代碼</b>自動生成器V1.2應(yīng)用程序免費(fèi)下載

    stm32下標(biāo)準(zhǔn)庫函數(shù)與HAL庫函數(shù)編程方式的差異

    stm32下標(biāo)準(zhǔn)庫函數(shù)與HAL庫函數(shù)編程方式的差異標(biāo)準(zhǔn)庫函數(shù)HAL庫函數(shù)標(biāo)準(zhǔn)庫函數(shù)與HAL
    發(fā)表于 12-09 14:21 ?15次下載
    <b class='flag-5'>stm32</b>下標(biāo)準(zhǔn)<b class='flag-5'>庫函數(shù)</b>與HAL<b class='flag-5'>庫函數(shù)</b>編程方式的差異

    基于標(biāo)準(zhǔn)庫函數(shù)與基于HAL庫函數(shù)stm32編程方式對比

    以實(shí)例程序(串口通信),分析基于標(biāo)準(zhǔn)庫函數(shù)與基于HAL庫函數(shù)stm32編程方式的差異一、基于標(biāo)準(zhǔn)庫函數(shù)stm32編程方式二、基于HAL
    發(fā)表于 12-28 19:09 ?30次下載
    基于標(biāo)準(zhǔn)<b class='flag-5'>庫函數(shù)</b>與基于HAL<b class='flag-5'>庫函數(shù)</b>的<b class='flag-5'>stm32</b>編程方式<b class='flag-5'>對比</b>

    STM32庫函數(shù)SystemInit()詳解

    STM32庫函數(shù)SystemInit()詳解
    的頭像 發(fā)表于 09-18 15:45 ?4175次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>庫函數(shù)</b>SystemInit()詳解