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

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

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

3天內不再提示

STM32Cube LL庫的巧妙之處

jf_pJlTbmA9 ? 來源:嵌入式專欄 ? 作者:嵌入式專欄 ? 2023-09-27 16:26 ? 次閱讀

STM32的標準外設庫、HAL、LL軟件庫,都有很多巧妙之處值得大家借鑒。

今天講講STM32Cbue LL庫中巧妙運用“靜態內聯”使代碼更高效。

1、寫在前面

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

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

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

2、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

而讀寫位的定義:

wKgZomUD8vOAAVoMAAPXOuH7EDE950.png

這里面的宏定義,在眾多外設.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庫的執行效率更高。

3、什么是內聯函數

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

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

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

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

提示:

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

4、軟件框架思維

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

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

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

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

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

來源:嵌入式專欄

審核編輯:湯梓紅

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

    關注

    146

    文章

    17883

    瀏覽量

    361459
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11051

    瀏覽量

    216207
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140643
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    STM32標準外設SPL轉換成 Cube LL

    STM32標準外設SPL轉換成Cube LL
    的頭像 發表于 03-08 12:08 ?4469次閱讀

    講講開發STM32的四種

    Snippets Standard Peripheral Library STM32Cube LL STM32Cube?HAL 1、STM32Snippets 什么是
    的頭像 發表于 02-10 10:16 ?1.1w次閱讀
    講講開發<b class='flag-5'>STM32</b>的四種<b class='flag-5'>庫</b>

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

    Snippets Standard Peripheral Library STM32Cube LL STM32Cube?HAL 1、STM32Snippets 什么是
    發表于 03-05 06:17 ?50次下載
    <b class='flag-5'>STM32</b>四種<b class='flag-5'>庫</b>對比:寄存器、標準外設<b class='flag-5'>庫</b>、HAL、<b class='flag-5'>LL</b>

    STM32Cube介紹

    STM32Cube介紹
    發表于 12-08 15:51 ?19次下載
    <b class='flag-5'>STM32Cube</b>介紹

    STM32Cube學習一——簡介、工程建立、代碼輸出

    一,簡介STM32Cube是專門為STM32設計的方便編程的軟件,它可以輸出MDK,IAR等編寫工具的工程文件,生成之后,可以利用這些工具進行修改。這里我說一下Cube的弊端,它使用的
    發表于 12-27 18:45 ?0次下載
    <b class='flag-5'>STM32Cube</b>學習一——簡介、工程建立、代碼輸出

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

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

    AN4502_基于STM32Cube的SMBUS和PMBUS介紹

    AN4502_基于STM32Cube的SMBUS和PMBUS介紹
    發表于 11-21 17:06 ?8次下載
    AN4502_基于<b class='flag-5'>STM32Cube</b><b class='flag-5'>庫</b>的SMBUS和PMBUS介紹

    UM2073_STM32_LoRa的STM32Cube軟件擴展

    UM2073_STM32_LoRa的STM32Cube軟件擴展
    發表于 11-22 19:17 ?0次下載
    UM2073_<b class='flag-5'>STM32</b>_LoRa的<b class='flag-5'>STM32Cube</b>軟件擴展<b class='flag-5'>庫</b>

    UM2063_STM32_USB-PD的STM32Cube軟件擴展

    UM2063_STM32_USB-PD的STM32Cube軟件擴展
    發表于 11-22 19:17 ?0次下載
    UM2063_<b class='flag-5'>STM32</b>_USB-PD的<b class='flag-5'>STM32Cube</b>軟件擴展<b class='flag-5'>庫</b>

    UM2123_用于STM32Cube的X-CUBE-MEMS1擴展板的osxMotionAW手腕動作識別入門

    UM2123_用于STM32Cube的X-CUBE-MEMS1擴展板的osxMotionAW手腕動作識別入門
    發表于 11-22 19:24 ?0次下載
    UM2123_用于<b class='flag-5'>STM32Cube</b>的X-<b class='flag-5'>CUBE</b>-MEMS1擴展板的osxMotionAW手腕動作識別<b class='flag-5'>庫</b>入門

    DB3161 STM32WB系列的STM32Cube嵌入式軟件,包括LL/HAL驅動、Bluetooth? 5、Mesh V1.0、Zigbee和Thread?、RTOS、觸摸感應等

    DB3161 STM32WB系列的STM32Cube嵌入式軟件,包括LL/HAL驅動、Bluetooth? 5、Mesh V1.0、Zigbee和Thread?、RTOS、觸摸感應等
    發表于 11-23 08:27 ?0次下載
    DB3161 <b class='flag-5'>STM32</b>WB系列的<b class='flag-5'>STM32Cube</b>嵌入式軟件,包括<b class='flag-5'>LL</b>/HAL驅動、Bluetooth? 5、Mesh V1.0、Zigbee和Thread?<b class='flag-5'>庫</b>、RTOS、觸摸感應等

    STM32Cube X-CUBE-MEMS1擴展的MotionGR實時手勢識別入門

    電子發燒友網站提供《STM32Cube X-CUBE-MEMS1擴展的MotionGR實時手勢識別入門.pdf》資料免費下載
    發表于 07-31 09:17 ?0次下載
    <b class='flag-5'>STM32Cube</b> X-<b class='flag-5'>CUBE</b>-MEMS1擴展的MotionGR實時手勢識別<b class='flag-5'>庫</b>入門

    STM32標準外設遷移至STM32Cube底層

    STM32Cube LL手動遷移:詳細說明了手動遷移基于標準外設應用程序的步驟。? STM32 S
    發表于 08-31 10:25 ?0次下載

    STM32Cube USB設備

    電子發燒友網站提供《STM32Cube USB設備.pdf》資料免費下載
    發表于 09-21 11:06 ?8次下載
    <b class='flag-5'>STM32Cube</b> USB設備<b class='flag-5'>庫</b>
    主站蜘蛛池模板: 一级欧美一级日韩 | 99热国内精品 | 国产精品一久久香蕉产线看 | 亚州人成网在线播放 | 噜噜噜久久 | 性感美女视频黄.免费网站 性高清 | a欧美在线 | 四虎永久在线观看免费网站网址 | 欧美黄色片免费 | 日韩免费视频一区二区 | 欧美在线精品一区二区三区 | 欧美男女交性过程视频 | 夜夜骚视频 | 日本一视频一区视频二区 | 狠狠干亚洲色图 | 亚洲va中文va欧美va爽爽 | 黄网站在线观看高清免费 | 亚洲综合图片人成综合网 | 天天做天天爱天天爽 | 中文字幕色网站 | 美女下面小内内的沟 | 日本大片在线看 | 国产激情在线观看 | 亚洲成人激情片 | 六月综合网 | 亚洲一级毛片免费看 | 视频免费1区二区三区 | 五月婷婷亚洲综合 | 久久狠狠第一麻豆婷婷天天 | 午夜视频在线免费看 | 五月欧美激激激综合网色播 | 天天干天天操天天碰 | 国产精品久久久亚洲 | 天天看视频 | 亚洲成人77777 | 成人在线免费 | 日本一区二区三区视频在线观看 | 日本黄在线 | 天天射天天操天天色 | 在线成人免费观看国产精品 | 一级特黄aaa免费 |