[开发工具] ST库函数性能对比

[复制链接]
1116|10
 楼主| gaoyang9992006 发表于 2019-12-15 21:51 | 显示全部楼层 |阅读模式
ST已经推出了三种库函数,用以方便客户快速开发STM32系列的MCU。从最早的标准外设驱动库,到后来的Cube HAL ,再到 Cube LL,还有直接写寄存器。这几种库的代码效率到底如何呢?本文将针对这个问题进行分析和对比,最后提供对比数据供大家参考。
问题分析 我们以GPIO翻转、TIM PWM 输出、ADC DMA 数据采集和DMA M2M这四个常用功能,通过不同的库函数来实现,最终来对比各个库函数的性能。四个工程代码的内容简述如下:
GPIO翻转:切换GPIO的输出电平,其中包含了系统时钟初始化和GPIO翻转的代码。
TIM PWM输出:通过TIM1 的通道1输出频率是36KHz的PWM,循环修改其占空比从25%到50%,其中包含了系统时钟初始化、TIM1的初始化和切换占空比的代码。
ADC DMA数据采集:通过ADC的模拟通道1,采集100次ADC的结果,并使用DMA传输到到用户缓冲区,其中包含了系统时钟初始化、ADC初始化和DMA的初始化的代码。
DMA M2M:使用DMA1的通道1,从Flash中传输100字节的数据到片内的SRAM中。其中包含了系统时钟的初始化和DMA的初始化代码。
主要对比三个参数:Flash 占用量、SRAM占用量和执行代码的效率。
Flash和SRAM的占用量可以通过查看IAR生成的*.map文件了解到。
297155df63a5319e2e.png
 楼主| gaoyang9992006 发表于 2019-12-15 21:52 | 显示全部楼层
在*.map文件中,会有如上图的内容,其中的readonly code memory加上readonly data memory的和,就是Flash的占用量。而Readwrite data memory的大小即为SRAM的占用量。那么上图所示的Flash占用量即为3204=3174+30,SRAM占用量即为1032。因用户堆(Cstack)我们设置的为1024,所以真正应用代码所占用的SRAM量为8=1032-1024.
代码的运行效率部分,我们是通过IAR提供的内核运行周期数(CYCLECONTER)来计算的。在功能函数的开始处和结束处分别设置断点,两次内核运行周期数的差值,就是此处代码的运行周期。
540805df63a828a851.png
测试硬件选用了Nucleo-F302评估板。
软件环境和库函数详情如下:
• IAR V7.60
• Optimizations Level High (Size)
• STM32CubeMX V4.17
• Create Project with Copy the necessary library files
• STM32CubeF3 V1.60
• STM32F30x_DSP_StdPeriph_Lib_V1.2.3
• STM32F3xx CMSIS V2.3.0

 楼主| gaoyang9992006 发表于 2019-12-15 21:53 | 显示全部楼层
940785df63acce2a32.png
总结: 总体来看,代码效率与移植性成反比的规律是明显的。但与Cube HAL相比, Cube LL的效率优势还是很明显的,几乎和直接写寄存器的效率相差无几。而且目前STM32cubeMX已经开始支持直接生成使用Cube LL的工程,对于以后追求效率的开发应用人员来说,非常值得推荐给大家使用。
 楼主| gaoyang9992006 发表于 2019-12-15 21:53 | 显示全部楼层
STM32_库函数性能对比.pdf (240.74 KB, 下载次数: 14)
18001210 发表于 2019-12-16 08:51 | 显示全部楼层
要是有LL库的中文说明书就好了,
1021256354 发表于 2019-12-16 10:13 | 显示全部楼层
gaoyang9992006 发表于 2019-12-15 21:53
总结: 总体来看,代码效率与移植性成反比的规律是明显的。但与Cube HAL相比, Cube LL的效率优势还是很明 ...

F3高性能;通用的F1差多少?
renzheshengui 发表于 2020-1-14 10:29 | 显示全部楼层
非常感谢楼主分享
wakayi 发表于 2020-1-14 10:36 | 显示全部楼层
非常感谢楼主分享
xiaoqizi 发表于 2020-1-14 10:45 | 显示全部楼层
非常感谢楼主分享
木木guainv 发表于 2020-1-14 10:47 | 显示全部楼层
非常感谢楼主分享
wowu 发表于 2020-1-14 10:57 | 显示全部楼层
非常感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2053

主题

16417

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部