一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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為何能高效的原因

5RJg_mcuworld ? 來(lái)源:fqj ? 2019-04-26 14:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ST的庫(kù),有很多巧妙之處,值得大家借鑒。今天就來(lái)講講STM32Cbue LL庫(kù)中的一點(diǎn)小知識(shí)。

1寫(xiě)在前面

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

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

承認(rèn),HAL相對(duì)來(lái)說(shuō)有這些問(wèn)題,那么與之對(duì)應(yīng)的STM32CubeLL恰好避免了這樣的問(wèn)題。

2LL能高效的原因

簡(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ě)位的定義:

探究STM32Cube LL為何能高效的原因

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

LL使能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); }}

你會(huì)明顯發(fā)現(xiàn):LL庫(kù)的執(zhí)行效率更高。

3拓展:內(nèi)聯(lián)函數(shù)

寫(xiě)到這里,就順便復(fù)習(xí)一下內(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ò)展。

通常,程序執(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á)到事半功倍的效果。

聲明:本文內(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)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141683

原文標(biāo)題:STM32Cube LL能高效的原因在此!

文章出處:【微信號(hào):mcuworld,微信公眾號(hào):嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    STM32Cube知識(shí)大全

    本文檔內(nèi)容包含了STM32Cube知識(shí)大全,不同知識(shí)點(diǎn)的圖解,希望對(duì)大家有所幫助。
    發(fā)表于 09-12 19:18 ?26次下載
    <b class='flag-5'>STM32Cube</b>知識(shí)大全

    STM32Cube學(xué)習(xí)之一:點(diǎn)燈

    STM32Cube學(xué)習(xí)之一:點(diǎn)燈
    發(fā)表于 12-12 15:30 ?22次下載

    介紹STM32Cube的特點(diǎn)及應(yīng)用

    2014年STM32 Roadshow:STM32Cube簡(jiǎn)介
    的頭像 發(fā)表于 07-05 00:26 ?5452次閱讀

    使用STM32Cube輕松開(kāi)發(fā)STM32

    STM32CubeSTM32開(kāi)發(fā)更輕松
    的頭像 發(fā)表于 07-03 04:30 ?6062次閱讀

    STM32CubeLL能高效原因

    STM32Cube LL高效原因
    的頭像 發(fā)表于 03-01 13:51 ?2242次閱讀

    STM32Cube到底包含哪些工具 ?

    STM32Cube到底包含哪些工具?
    的頭像 發(fā)表于 03-04 10:16 ?8933次閱讀

    STM32實(shí)戰(zhàn) 1 | STM32Cube生態(tài)系統(tǒng)認(rèn)識(shí)與介紹

    STM32實(shí)戰(zhàn) 1 | STM32Cube生態(tài)系統(tǒng)認(rèn)識(shí)與介紹STM32Cube Ecosystem STM生態(tài)系統(tǒng)STM32Cube MCU Packages(
    發(fā)表于 11-19 12:36 ?14次下載
    <b class='flag-5'>STM32</b>實(shí)戰(zhàn) 1 | <b class='flag-5'>STM32Cube</b>生態(tài)系統(tǒng)認(rèn)識(shí)與介紹

    STM32Cube介紹

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

    精雕細(xì)琢見(jiàn)真章《STM32Cube高效開(kāi)發(fā)教程》

    我們編寫(xiě)的新書(shū)《STM32Cube高效開(kāi)發(fā)教程(基礎(chǔ)篇)》終于在各大電商平臺(tái)上架銷(xiāo)售了,這是值得眾多STM32開(kāi)發(fā)者入手的一本新書(shū),它是目前市面上第一本采用STM32
    發(fā)表于 12-31 19:28 ?349次下載
    精雕細(xì)琢見(jiàn)真章《<b class='flag-5'>STM32Cube</b><b class='flag-5'>高效</b>開(kāi)發(fā)教程》

    DB3215 基于STM32 Amazon STM32Cube數(shù)據(jù)手冊(cè)

    DB3215 基于STM32 Amazon STM32Cube數(shù)據(jù)手冊(cè)
    發(fā)表于 11-23 08:27 ?1次下載
    DB3215 基于<b class='flag-5'>STM32</b> Amazon <b class='flag-5'>STM32Cube</b>數(shù)據(jù)手冊(cè)

    STM32Cube培訓(xùn)指南

    電子發(fā)燒友網(wǎng)站提供《STM32Cube培訓(xùn)指南.pdf》資料免費(fèi)下載
    發(fā)表于 07-31 15:02 ?2次下載
    <b class='flag-5'>STM32Cube</b>培訓(xùn)指南

    STM32Cube在線培訓(xùn)

    電子發(fā)燒友網(wǎng)站提供《STM32Cube在線培訓(xùn).pdf》資料免費(fèi)下載
    發(fā)表于 08-01 14:23 ?3次下載
    <b class='flag-5'>STM32Cube</b>在線培訓(xùn)

    始使用X-CUBE-SBSFU STM32Cube擴(kuò)展包

    電子發(fā)燒友網(wǎng)站提供《始使用X-CUBE-SBSFU STM32Cube擴(kuò)展包.pdf》資料免費(fèi)下載
    發(fā)表于 08-01 09:22 ?0次下載
    始使用X-<b class='flag-5'>CUBE</b>-SBSFU <b class='flag-5'>STM32Cube</b>擴(kuò)展包

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

    本應(yīng)用筆記介紹了從現(xiàn)有使用STM32 SPL開(kāi)發(fā)的基于STM32的應(yīng)用程序遷移到使用STM32Cube LL驅(qū)動(dòng)程序的任何其他類(lèi)型的微控制器的步驟。本應(yīng)用筆記匯總了將基于
    發(fā)表于 08-31 10:25 ?0次下載

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

    STM32Cube LL庫(kù)的巧妙之處
    的頭像 發(fā)表于 09-27 16:26 ?1787次閱讀
    <b class='flag-5'>STM32Cube</b> <b class='flag-5'>LL</b>庫(kù)的巧妙之處