chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

STM32Cube LL庫(kù)的巧妙之處

jf_pJlTbmA9 ? 來(lái)源:嵌入式專(zhuān)欄 ? 作者:嵌入式專(zhuān)欄 ? 2023-09-27 16:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

STM32的標(biāo)準(zhǔn)外設(shè)庫(kù)、HAL、LL軟件庫(kù),都有很多巧妙之處值得大家借鑒。

今天講講STM32Cbue LL庫(kù)中巧妙運(yùn)用“靜態(tài)內(nèi)聯(lián)”使代碼更高效。

1、寫(xiě)在前面

有些應(yīng)用要求MCU能高效處理,特別是跑一些算法時(shí),對(duì)CPU執(zhí)行效率要求較高。

網(wǎng)上有很多文章說(shuō)STM32Cube HAL執(zhí)行效率不高,代碼量大等問(wèn)題,導(dǎo)致很多還沒(méi)有入門(mén),或初學(xué)的讀者就產(chǎn)生各種各樣的疑惑。

說(shuō)實(shí)話,HAL相對(duì)標(biāo)準(zhǔn)外設(shè)庫(kù)來(lái)說(shuō)確實(shí)存在代碼效率不高、代碼量大燈這些問(wèn)題,那么與之對(duì)應(yīng)的STM32Cube LL恰好避免了這樣的問(wèn)題。

2、LL能高效的原因

簡(jiǎn)單總結(jié)一下原因:巧妙運(yùn)用C語(yǔ)言靜態(tài)、內(nèi)聯(lián)函數(shù)直接操作寄存器。

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

你會(huì)在LL庫(kù).h文件中發(fā)現(xiàn)大量類(lèi)似,靜態(tài)、內(nèi)聯(lián)函數(shù)直接讀寫(xiě)寄存器的函數(shù)。

比如讀寫(xiě)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,就是靜態(tài)、內(nèi)聯(lián):

#define __STATIC_INLINE  static __inline

而讀寫(xiě)位的定義:

wKgZomUD8vOAAVoMAAPXOuH7EDE950.png

這里面的宏定義,在眾多外設(shè).h中都在調(diào)用。比如使能USART:

LL庫(kù)使能USART:

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

標(biāo)準(zhǔn)外設(shè)庫(kù)使能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);
  }
}

通過(guò)對(duì)比,你會(huì)明顯發(fā)現(xiàn):LL庫(kù)的執(zhí)行效率更高。

3、什么是內(nèi)聯(lián)函數(shù)

寫(xiě)到這里,就可能有讀者會(huì)問(wèn):什么是內(nèi)聯(lián)函數(shù)?

內(nèi)聯(lián)函數(shù)是一種編程語(yǔ)言結(jié)構(gòu),用來(lái)建議編譯器對(duì)一些特殊函數(shù)進(jìn)行內(nèi)聯(lián)擴(kuò)展。(---來(lái)自百度百科)

通常,程序執(zhí)行時(shí),處理器從內(nèi)存中讀取代碼執(zhí)行。當(dāng)程序中調(diào)用一個(gè)函數(shù)時(shí),程序跳到存儲(chǔ)器中保存函數(shù)的位置,開(kāi)始讀取代碼執(zhí)行,執(zhí)行完后再返回。

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

提示:

當(dāng)內(nèi)聯(lián)函數(shù)很大時(shí),會(huì)有相反的作用,因此一般比較小的函數(shù)才使用內(nèi)聯(lián)函數(shù)。

4、軟件框架思維

LL之所以高效,是因?yàn)樗擅钸\(yùn)用了一些C語(yǔ)言知識(shí),沒(méi)有太多封裝,直接或間接對(duì)寄存器進(jìn)行操作。

而能這樣實(shí)現(xiàn),歸功于ST開(kāi)發(fā)團(tuán)隊(duì)設(shè)計(jì)了這么一個(gè)中間層軟件框架。

對(duì)于有大型項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)的人來(lái)說(shuō),一個(gè)項(xiàng)目的框架對(duì)整個(gè)項(xiàng)目影響很大。

就好比你建一棟樓,如果樓層框架都沒(méi)造好,你覺(jué)得這棟樓質(zhì)量會(huì)好嗎?

所以,這里就提到,我們編程時(shí),特別項(xiàng)目較大,需要考慮一下軟件框架,一個(gè)好的框架能讓你你的項(xiàng)目達(dá)到事半功倍的效果。

來(lái)源:嵌入式專(zhuān)欄

審核編輯:湯梓紅

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

    關(guān)注

    147

    文章

    18582

    瀏覽量

    385771
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11213

    瀏覽量

    222734
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7642

    瀏覽量

    144516
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32四種庫(kù)對(duì)比 STM32標(biāo)準(zhǔn)庫(kù)和HAL庫(kù)有什么不同?

    STM32的四種庫(kù)STM32Snippets、Standard Peripheral Library、STM32Cube LL、
    發(fā)表于 08-24 09:45 ?1.7w次閱讀
    <b class='flag-5'>STM32</b>四種<b class='flag-5'>庫(kù)</b>對(duì)比 <b class='flag-5'>STM32</b>標(biāo)準(zhǔn)<b class='flag-5'>庫(kù)</b>和HAL<b class='flag-5'>庫(kù)</b>有什么不同?

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)SPL轉(zhuǎn)換成 Cube LL

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)SPL轉(zhuǎn)換成Cube LL
    的頭像 發(fā)表于 03-08 12:08 ?4908次閱讀

    講講開(kāi)發(fā)STM32的四種庫(kù)

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

    STM32四種庫(kù)對(duì)比:寄存器、標(biāo)準(zhǔn)外設(shè)庫(kù)、HAL、LL

    Snippets Standard Peripheral Library STM32Cube LL STM32Cube?HAL 1、STM32Snippets 什么是
    發(fā)表于 03-05 06:17 ?50次下載
    <b class='flag-5'>STM32</b>四種<b class='flag-5'>庫(kù)</b>對(duì)比:寄存器、標(biāo)準(zhǔn)外設(shè)<b class='flag-5'>庫(kù)</b>、HAL、<b class='flag-5'>LL</b>

    STM32Cube介紹

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

    STM32Cube學(xué)習(xí)一——簡(jiǎn)介、工程建立、代碼輸出

    一,簡(jiǎn)介STM32Cube是專(zhuān)門(mén)為STM32設(shè)計(jì)的方便編程的軟件,它可以輸出MDK,IAR等編寫(xiě)工具的工程文件,生成之后,可以利用這些工具進(jìn)行修改。這里我說(shuō)一下Cube的弊端,它使用的庫(kù)
    發(fā)表于 12-27 18:45 ?0次下載
    <b class='flag-5'>STM32Cube</b>學(xué)習(xí)一——簡(jiǎn)介、工程建立、代碼輸出

    STM32Cbue LL庫(kù)巧妙運(yùn)用“靜態(tài)內(nèi)聯(lián)”

    STM32的標(biāo)準(zhǔn)外設(shè)庫(kù)、HAL、LL軟件庫(kù),都有很多巧妙之處值得大家借鑒。 今天講講
    發(fā)表于 08-14 14:30 ?1506次閱讀

    AN4502_基于STM32Cube庫(kù)的SMBUS和PMBUS介紹

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

    UM2073_STM32_LoRa的STM32Cube軟件擴(kuò)展庫(kù)

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

    UM2063_STM32_USB-PD的STM32Cube軟件擴(kuò)展庫(kù)

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

    UM2123_用于STM32Cube的X-CUBE-MEMS1擴(kuò)展板的osxMotionAW手腕動(dòng)作識(shí)別庫(kù)入門(mén)

    UM2123_用于STM32Cube的X-CUBE-MEMS1擴(kuò)展板的osxMotionAW手腕動(dòng)作識(shí)別庫(kù)入門(mén)
    發(fā)表于 11-22 19:24 ?0次下載
    UM2123_用于<b class='flag-5'>STM32Cube</b>的X-<b class='flag-5'>CUBE</b>-MEMS1擴(kuò)展板的osxMotionAW手腕動(dòng)作識(shí)別<b class='flag-5'>庫(kù)</b>入門(mén)

    DB3161 STM32WB系列的STM32Cube嵌入式軟件,包括LL/HAL驅(qū)動(dòng)、Bluetooth? 5、Mesh V1.0、Zigbee和Thread?庫(kù)、RTOS、觸摸感應(yīng)等

    DB3161 STM32WB系列的STM32Cube嵌入式軟件,包括LL/HAL驅(qū)動(dòng)、Bluetooth? 5、Mesh V1.0、Zigbee和Thread?庫(kù)、RTOS、觸摸感應(yīng)等
    發(fā)表于 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驅(qū)動(dòng)、Bluetooth? 5、Mesh V1.0、Zigbee和Thread?<b class='flag-5'>庫(kù)</b>、RTOS、觸摸感應(yīng)等

    STM32Cube X-CUBE-MEMS1擴(kuò)展的MotionGR實(shí)時(shí)手勢(shì)識(shí)別庫(kù)入門(mén)

    電子發(fā)燒友網(wǎng)站提供《STM32Cube X-CUBE-MEMS1擴(kuò)展的MotionGR實(shí)時(shí)手勢(shì)識(shí)別庫(kù)入門(mén).pdf》資料免費(fèi)下載
    發(fā)表于 07-31 09:17 ?0次下載
    <b class='flag-5'>STM32Cube</b> X-<b class='flag-5'>CUBE</b>-MEMS1擴(kuò)展的MotionGR實(shí)時(shí)手勢(shì)識(shí)別<b class='flag-5'>庫(kù)</b>入門(mén)

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)遷移至STM32Cube底層庫(kù)

    STM32Cube LL手動(dòng)遷移:詳細(xì)說(shuō)明了手動(dòng)遷移基于標(biāo)準(zhǔn)外設(shè)庫(kù)應(yīng)用程序的步驟。? STM32 S
    發(fā)表于 08-31 10:25 ?0次下載

    STM32Cube USB設(shè)備庫(kù)

    電子發(fā)燒友網(wǎng)站提供《STM32Cube USB設(shè)備庫(kù).pdf》資料免費(fèi)下載
    發(fā)表于 09-21 11:06 ?9次下載
    <b class='flag-5'>STM32Cube</b> USB設(shè)備<b class='flag-5'>庫(kù)</b>