你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32Cube LL能高效的原因

[复制链接]
STMCU 发布时间:2020-10-26 15:59
STM32Cube LL能高效的原因


1.png
ST的库,有很多巧妙之处,值得大家借鉴。今天就来讲讲STM32Cbue LL库中的一点小知识。


1写在前面
有些应用要求MCU能高效处理,特别是跑一些算法时,对CPU执行效率这一块有要求。


网上有很多文章说STM32Cube HAL执行效率不高,代码量大等问题,导致很多没入门,或初学的朋友产生各种各样的疑惑。


承认,HAL相对来说有这些问题,那么与之对应的STM32Cube LL恰好避免了这样的问题。


2LL能高效的原因
简单总结一下原因:巧妙运用C语言静态的,内联函数直接操作寄存器。


当然,这是其中重要的原因,还有一些其它原因,这里不描述。


你会在LL库.h文件中发现大量类似,静态,内联函数直接读写寄存器的函数。


比如:读写IO口

  1. __STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
  2. {
  3.   return (uint32_t)(READ_REG(GPIOx->ODR));
  4. }

  5. __STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
  6. {
  7.   WRITE_REG(GPIOx->BSRR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU);
  8. }
复制代码

其中__STATIC_INLINE,就是静态、内联:

  1. #define __STATIC_INLINE  static __inline
复制代码

而读写位的定义:
2.png
这里面的红定义,在众多外设.h中都在调用。比如使能USART:


LL使能USART:

  1. __STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx)
  2. {
  3.   SET_BIT(USARTx->CR1, USART_CR1_UE);
  4. }
复制代码

标准外设库使能USART:

  1. void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
  2. {
  3.   /* Check the parameters */
  4.   assert_param(IS_USART_ALL_PERIPH(USARTx));
  5.   assert_param(IS_FUNCTIONAL_STATE(NewState));
  6.   
  7.   if (NewState != DISABLE)
  8.   {
  9.     /* Enable the selected USART by setting the UE bit in the CR1 register */
  10.     USARTx->CR1 |= USART_CR1_UE;
  11.   }
  12.   else
  13.   {
  14.     /* Disable the selected USART by clearing the UE bit in the CR1 register */
  15.     USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE);
  16.   }
  17. }
复制代码

你会明显发现:LL库的执行效率更高。



3拓展:内联函数
写到这里,就顺便复习一下内联函数。

内联函数是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展。
---来自百度百科

通常,程序执行时,处理器从内存中读取代码执行。当程序中调用一个函数时,程序跳到存储器中保存函数的位置,开始读取代码执行,执行完后再返回。

为了提高速度,C语言定义了inline函数,告诉编译器把函数代码在编译时直接拷贝到程序中,这样就不用执行时另外读取函数代码。

提示:


当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数。

4拓展:软件框架思维
LL之所以高效,是因为它巧妙运用了一些C语言知识,没有太多封装,直接或间接对寄存器进行操作。

而能这样实现,归功于ST开发团队设计了这么一个中间层软件框架。

对于有大型项目开发经验的人来说,一个项目的框架对整个项目影响很大。

就好比你建一栋楼,如果楼层框架都没造好,你觉得这栋楼质量会好吗?

所以,这里就提到,我们编程时,特别项目较大,需要考虑一下软件框架,一个好的框架能让你你的项目达到事半功倍的效果。









收藏 评论0 发布时间:2020-10-26 15:59

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版