页面加载中,请稍候
来源:strongerHuang发布时间:2022-08-14635浏览
询问 AI
作者 | strongerHuang
微信公众号|嵌入式专栏
有些应用要求MCU能高效处理,特别是跑一些算法时,对CPU执行效率要求较高。
简单总结一下原因:巧妙运用C语言静态、内联函数直接操作寄存器。
__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库的执行效率更高。
写到这里,就可能有读者会问:什么是内联函数?
内联函数是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展。---来自百度百科
LL之所以高效,是因为它巧妙运用了一些C语言知识,没有太多封装,直接或间接对寄存器进行操作。
而能这样实现,归功于ST开发团队设计了这么一个中间层软件框架。
对于有大型项目开发经验的人来说,一个项目的框架对整个项目影响很大。
就好比你建一栋楼,如果楼层框架都没造好,你觉得这栋楼质量会好吗?
所以,这里就提到,我们编程时,特别项目较大,需要考虑一下软件框架,一个好的框架能让你你的项目达到事半功倍的效果。


新闻来源:strongerHuang,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!
2026-07-09
2026-07-17