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

【经验分享】关于 ST 库函数的代码性能对比

[复制链接]
STMCU小助手 发布时间:2022-3-5 10:09
前言3 ^! x6 @7 [$ {; `! p
ST 已经推出了三种库函数,用以方便客户快速开发 STM32 系列的 MCU。从最早的标准外设驱动库,到后来的 Cube HAL ,再到 Cube LL,还有直接写寄存器。这几种库的代码效率到底如何呢?本文将针对这个问题进行分析和对比,最后提供对比数据供大家参考。
. ?% _& o$ T/ {- r) w& ]/ y4 t* w  ?$ {2 j8 S5 n) p$ `: k
问题分析8 q" J  j% D$ k" X0 V7 S
我们以 GPIO 翻转、TIM PWM 输出、ADC DMA 数据采集和 DMA M2M 这四个常用功能,通过不同的库函数来实现,最终来对比各个库函数的性能。四个工程代码的内容简述如下:. p+ K+ Y: O3 Q8 e
GPIO 翻转:切换 GPIO 的输出电平,其中包含了系统时钟初始化和 GPIO 翻转的代码。5 O; j0 k0 V* w3 B! ^5 a6 n
TIM PWM 输出:通过 TIM1 的通道 1 输出频率是 36KHz 的 PWM,循环修改其占空比从 25%到 50%,其中包含了系统时钟初始化、TIM1 的初始化和切换占空比的代码。: v, H; O' @6 i! [5 e2 G
ADC DMA 数据采集:通过 ADC 的模拟通道 1,采集 100 次 ADC 的结果,并使用 DMA 传输到到用户缓冲区,其中包含了系统时钟初始化、ADC 初始化和 DMA 的初始化的代码。
, [  @, G/ U1 gDMA M2M:使用 DMA1 的通道 1,从 Flash 中传输 100 字节的数据到片内的 SRAM 中。其中包含了系统时钟的初始化和 DMA的初始化代码。
0 I9 C/ p+ P% i3 K4 T主要对比三个参数:Flash 占用量、SRAM 占用量和执行代码的效率。% @6 l! ~, {) F; W# S: K( M4 V
Flash 和 SRAM 的占用量可以通过查看 IAR 生成的*.map 文件了解到。- B" L2 t: y, k+ K' s
8 g5 L# c& J9 M6 I9 X9 F% S& R
1UMT3$PZQG1B5(R~6SN6JPM.png
( ~! C$ V+ F3 f2 {
, T, r8 g; [. i6 }5 W在*.map 文件中,会有如上图的内容,其中的 readonly code memory 加上 readonly data memory 的和,就是 Flash 的占用量。而 Readwrite data memory 的大小即为 SRAM 的占用量。那么上图所示的 Flash 占用量即为 3204=3174+30,SRAM 占用量即为 1032。因用户堆(Cstack)我们设置的为 1024,所以真正应用代码所占用的 SRAM 量为 8=1032-1024.
% S8 N. `' N7 c' }! H- }" \代码的运行效率部分,我们是通过 IAR 提供的内核运行周期数(CYCLECONTER)来计算的。在功能函数的开始处和结束处分别设置断点,两次内核运行周期数的差值,就是此处代码的运行周期。# _0 w; A5 t! U$ Q- ]

( _8 q1 i3 ?; F' [, [ LN3GWROI@6](5({4`ZTQEMG.png 4 D; ^0 t* l3 Z- A
( o% C! \6 z" g# i6 M# f
测试硬件选用了 Nucleo-F302 评估板。& k, I2 t7 p0 }
软件环境和库函数详情如下:
7 d8 k0 n4 v) ~' k' n• IAR V7.60
7 Z3 d+ u$ t+ c3 H• Optimizations Level High (Size)2 h4 f+ T( a7 A- N4 A  K
• STM32CubeMX V4.173 f5 h' b! Z+ q( ?9 h
• Create Project with Copy the necessary library files5 A, s  A" y4 I% J, k& M! {/ q+ o& ~8 e
• STM32CubeF3 V1.607 }0 i2 ?1 K* l  f9 m
• STM32F30x_DSP_StdPeriph_Lib_V1.2.3
8 J/ }' L$ F4 l- c$ G4 J• STM32F3xx CMSIS V2.3.0
. U3 Y" y! t9 R1 M- n测试结果如下:# D- w& H7 g8 Z6 }

; u. _# g; L* L% x [BR4_PFCTZG08]WZHE8POKY.png 3 D  F" S+ E* h6 C/ f0 t6 q
- P( q7 X7 d8 K( C
总结:
! e# c9 N9 S/ d, t% U总体来看,代码效率与移植性成反比的规律是明显的。但与 Cube HAL 相比, Cube LL 的效率优势还是很明显的,几乎和直接写寄存器的效率相差无几。而且目前 STM32cubeMX 已经开始支持直接生成使用 Cube LL 的工程,对于以后追求效率的开发应用人员来说,非常值得推荐给大家使用。
; w6 a) U8 A; S6 w9 R: s! g
2 v+ Y& t. t, z
赞 收藏 评论0 发布时间:2022-3-5 10:09

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版