在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32 LL庫為什么比HAL庫高效呢?

冬至子 ? 來源:strongerHuang ? 作者:strongerHuang ? 2023-10-26 16:42 ? 次閱讀

概 述

有些應用要求MCU能高效處理,特別是跑一些算法時,對CPU執行效率要求較高。

網上有很多文章說STM32Cube HAL執行效率不高,代碼量大等問題 ,導致很多還沒有入門,或初學的讀者就產生各種各樣的疑惑。

說實話,HAL相對標準外設庫來說確實存在代碼效率不高、代碼量大燈這些問題,那么與之對應的STM32Cube LL恰好避免了這樣的問題。

LL能高效的原因

簡單總結一下原因: 巧妙運用C語言靜態、內聯函數直接操作寄存器

當然,這是其中重要的原因,還有一些其它原因,這里暫不描述。

你會在LL庫.h文件中發現大量類似,靜態、內聯函數直接讀寫寄存器的函數。

比如讀寫IO口:

__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
{
  return (uint32_t)(READ_REG(GPIOx- >ODR));
}


__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
{
  WRITE_REG(GPIOx- >BSRR, (PinMask > > GPIO_PIN_MASK_POS) & 0x0000FFFFU);
}

其中 __STATIC_INLINE ,就是靜態、內聯:

#define __STATIC_INLINE  static __inline

而讀寫位的定義:

圖片

這里面的 宏定義 ,在眾多外設.h中都在調用。 比如使能USART

LL庫使能USART:

__STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx)
{
  SET_BIT(USARTx- >CR1, USART_CR1_UE);
}

標準外設庫使能USART:

void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));


  if (NewState != DISABLE)
  {
    /* Enable the selected USART by setting the UE bit in the CR1 register */
    USARTx- >CR1 |= USART_CR1_UE;
  }
  else
  {
    /* Disable the selected USART by clearing the UE bit in the CR1 register */
    USARTx- >CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE);
  }
}

通過對比,你會明顯發現: LL庫的執行效率更高

什么是內聯函數?

寫到這里,就可能有讀者會問:什么是內聯函數?

內聯函數是一種編程語言結構,用來建議編譯器對一些特殊函數進行內聯擴展。

通常,程序執行時,處理器從內存中讀取代碼執行。 當程序中調用一個函數時,程序跳到存儲器中保存函數的位置 ,開始讀取代碼執行,執行完后再返回。

為了提高速度,C語言定義了inline函數,告訴編譯器把函數代碼在編譯時 直接拷貝到程序中 ,這樣就不用執行時另外讀取函數代碼。

**提示:**當內聯函數很大時,會有相反的作用,因此一般比較小的函數才使用內聯函數。

軟件框架思維

LL之所以高效,是因為它巧妙運用了一些C語言知識,沒有太多封裝,直接或間接對寄存器進行操作。

而能這樣實現, 歸功于ST開發團隊設計了這么一個中間層軟件框架

對于有大型項目開發經驗的人來說,一個項目的框架對整個項目影響很大。

就好比你建一棟樓,如果樓層框架都沒造好,你覺得這棟樓質量會好嗎?

所以,這里就提到,我們編程時,特別項目較大,需要考慮一下軟件框架,一個好的框架能讓你的項目達到事半功倍的效果。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356601
  • C語言
    +關注

    關注

    180

    文章

    7608

    瀏覽量

    137135
  • GPIO
    +關注

    關注

    16

    文章

    1212

    瀏覽量

    52182
  • USART串口
    +關注

    關注

    0

    文章

    32

    瀏覽量

    6867
  • HAL庫
    +關注

    關注

    1

    文章

    121

    瀏覽量

    6326
收藏 人收藏

    評論

    相關推薦

    STM32標準HALLL介紹

    我們在進行STM32開發的時候,使用寄存器進行開發的終究是少數,大多數人還是習慣用庫函數進行開發。到目前為止,有標準外設HALLL
    發表于 06-21 15:13 ?1.4w次閱讀
    <b class='flag-5'>STM32</b>標準<b class='flag-5'>庫</b>、<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>和<b class='flag-5'>LL</b><b class='flag-5'>庫</b>介紹

    STM32四種對比 STM32標準HAL有什么不同?

    STM32的四種STM32Snippets、Standard Peripheral Library、STM32Cube LL
    發表于 08-24 09:45 ?1.4w次閱讀
    <b class='flag-5'>STM32</b>四種<b class='flag-5'>庫</b>對比 <b class='flag-5'>STM32</b>標準<b class='flag-5'>庫</b>和<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>有什么不同?

    STM32HAL、標準外設LLSTM32 Embedded Software)

    STM32 Embedded Software??工作以來一直使用ST的STM32系列芯片,ST為開發者提供了非常方便的開發。到目前為止,有標準外設(STD
    發表于 07-03 15:02

    STM32 LL使用指南

    STM32 LL使用指南
    發表于 01-23 17:31 ?227次下載

    STM32HALLL能共同使用(混用)嗎?

    STM32HALLL能共同使用(混用)嗎?
    的頭像 發表于 02-28 16:57 ?1.4w次閱讀

    講講開發STM32的四種

    1.我是選擇寄存器開發STM32,還是標準外設? 2.你有STM32L0標準外設嗎? 3.HA
    的頭像 發表于 02-10 10:16 ?1.1w次閱讀
    講講開發<b class='flag-5'>STM32</b>的四種<b class='flag-5'>庫</b>

    STM32四種對比:寄存器、標準外設HALLL

    1.我是選擇寄存器開發STM32,還是標準外設? 2.你有STM32L0標準外設嗎? 3.HAL
    發表于 03-05 06:17 ?50次下載
    <b class='flag-5'>STM32</b>四種<b class='flag-5'>庫</b>對比:寄存器、標準外設<b class='flag-5'>庫</b>、<b class='flag-5'>HAL</b>、<b class='flag-5'>LL</b>

    LL串口+DMA

    由于工作中測試發現串口傳輸數據延時有點大,傳輸35個字節,115200,理論值應該在3ms左右,然而實際測試卻有40ms,所以首先想到會不會是hal執行效率低得原因,所以采用LL
    發表于 12-27 19:31 ?19次下載
    <b class='flag-5'>LL</b><b class='flag-5'>庫</b>串口+DMA

    STM32Cbue LL中巧妙運用“靜態內聯”

    STM32的標準外設HALLL軟件,都有很多巧妙之處值得大家借鑒。 今天講講STM32
    發表于 08-14 14:30 ?1172次閱讀

    stm32 hal資料分享

    stm32 hal資料分享
    發表于 11-03 16:17 ?120次下載

    STM32HAL知識總結

    ST 為開發者提供了非常方便的開發:有標準外設(SPL)、HAL (Hardware Abstraction Layer,硬件抽象層
    的頭像 發表于 01-14 11:37 ?2779次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>知識總結

    STM32 HAL的功能和使用方法 STM32 HAL和標準的區別

    和可維護性,從而節省開發成本和時間。STM32 HALSTM32系列芯片的HAL,由ST公
    發表于 08-08 18:21 ?4555次閱讀

    STM32Cube LL的巧妙之處

    STM32Cube LL的巧妙之處
    的頭像 發表于 09-27 16:26 ?1429次閱讀
    <b class='flag-5'>STM32</b>Cube <b class='flag-5'>LL</b><b class='flag-5'>庫</b>的巧妙之處

    STM32 HAL串口收發是如何使用的?

    STM32 HAL串口收發是如何使用的? STM32是一款高性能的微控制器,它擁有廣泛的應用領域,其中包括了各種通訊應用,如UART串口通訊。HA
    的頭像 發表于 10-26 17:42 ?1243次閱讀

    STM32HALLL到底能不能混合使用

    STM32HALLL到底能不能混合使用STM32
    的頭像 發表于 10-26 17:42 ?1556次閱讀
    主站蜘蛛池模板: 欧美一级欧美一级高清| 国产1区2区三区不卡| 四虎影院新网址| 四虎884| 午夜欧美福利视频| 免费国产网站| 免费看污视频软件| 国产三a级日本三级日产三级| 成人在线a| 天天拍夜夜添久久精品免费| 免费在线观看a视频| 网站在线播放| 国产在线观看福利| 天天拍天天操| 九九碰| 免费啪视频| 免费在线观看视频网站| 一区二区三区高清在线| 天天天色| 美女黄色一级毛片| 欧美成人性高清观看| 男女在线视频| 女人的逼毛片| 色a4yy综合私人| 在线免费视频你懂的| 特级做a爰片毛片免费看一区| 欧美精品久久久久久久小说| 国产黄页| 免费永久视频| 中文一区二区在线观看| 亚洲 欧美 日韩 综合| 免费在线播放毛片| 有坂深雪在线| 大又大粗又爽又黄少妇毛片| 亚洲综合图片人成综合网| 在线免费视频你懂的| 欧美伊人久久综合网| 艹逼视频免费看| 亚洲乱亚洲乱妇13p| 国产精品好好热在线观看| 波多野结衣中文字幕教师|