基于STM32的三种库函数代码效率对比解析

前言
st已经推出了三种库函数,以方便客户快速开发stm32系列mcu。从最早的标准外设驱动库,到后来的cube hal,再到cube ll以及直接操作寄存器。这几种库的代码效率到底如何呢?本文将针对这个问题进行粗略分析,并提供对比数据供大家参考。
问题分析
我们以gpio翻转、tim pwm 输出、adcdma 数据采集和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文件了解到。
在*.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)来计算的。在功能函数的开始处和结束处分别设置断点,两次内核运行周期数的差值,就是此处代码的运行周期。
测试硬件选用了nucleo-f302评估板。
软件环境和库函数详情如下:
• iar v7.60
• optimizations level high (size)
• stm32cubemx v4.17
• create project with copy the necessary libraryfiles
• stm32cubef3 v1.60
• stm32f30x_dsp_stdperiph_lib_v1.2.3
• stm32f3xx cmsis v2.3.0
测试结果如下:[手机模式下图片可点击放大观看]
总体来看,代码效率与代码的兼容性及可移植性成反比的规律是明显的。cube ll库的效率明显优于hal库的,几乎和直接写寄存器的效率相差无几。hal库函数因为要顾及整个stm32系列间的代码高度兼容与可移植性,代码相对庞大。对于刚接触stm32的人来说,非常易于上手做些基本的评估和验证,入门快捷。ll库的出现,是对hal库的有力补充。相比hal库用户,ll库用户需要对mcu及相应外设有更为细致的了解。
目前,stm32cubemx不但支持基于hal库的初始化文件的生成,也已支持基于ll库的初始化文件及工程的生成,对于已经比较熟悉stm32应用或关注代码效率的开发人员来说,可以优先考虑使用ll库。
顺便介绍在stm32cubemx的图形化界面下,如何选择使用hal库还是ll库生成初始化文件及相应工程。
在cubemx界面下,做好各个外设的选择及配置后,在projectproject settingadvanced settiing如下图示界面上,你可以选择要使用的库类型:hal/ll.
另外,偶尔人询问及ll库在哪里,其实ll库函数跟hal库函数是在同一目录下。以stm32f4为例,你下载stm32cubef4解压后,在类似如下目录可以看见hal函数和ll函数库文件。
。。。driversstm32f4xx_hal_driversrc

利用MEMS扫描镜技术提高汽车安全性
2020年的区块链有哪些预测
赛昉科技荣登2021投中榜·锐公司榜单:高性能RISC-V处理器唯一入选厂商
逆变器有那些重要疑问,电压为监测对象
UCP耳放的电路原理图_UCP耳放的电源电路图
基于STM32的三种库函数代码效率对比解析
绝缘电阻表测量的注意事项
欧姆龙推出自动化移动机器人
海信加速芯片布局 智能电视将迎新生
OPPO R9s清新绿限量版2分钟全网售罄
PCB设计中有哪些实用的设置和其他成功秘诀?
解读旁路二极管的基本特性和其在光伏组件中的运用
去库存化进入尾声,内存模组厂加速复苏
光纤适配器的原理、颜色标识和损坏原因
AI实现1小时除10万株草?
iPhone8犹抱琵琶半遮面!iPhone8细节对比,超大屏占比+改变厚度有木有很意外?
BLDC电机的梯形整流换向
电源浪涌保护的基础知识
拖盘缠绕包装机的使用优势
Wi-Fi模组是影响战事的“重头” WiFi-6如何改变物联网