历史上的今天
返回首页

历史上的今天

今天是:2025年12月07日(星期日)

正在发生

2022年12月07日 | 关于STM32库函数的代码性能对比

2022-12-07 来源:zhihu

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 文件了解到。




在*.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 library files
• STM32CubeF3 V1.60
• STM32F30x_DSP_StdPeriph_Lib_V1.2.3
• STM32F3xx CMSIS V2.3.0

测试结果如下:

总结:
总体来看,代码效率与移植性成反比的规律是明显的。但与 Cube HAL 相比, Cube LL 的效率优势还是很明显的,几乎和直接写寄存器的效率相差无几。而且目前 STM32cubeMX 已经开始支持直接生成使用 Cube LL 的工程,对于以后追求效率的开发应用人员来说,非常值得推荐给大家使用。


推荐阅读

史海拾趣

City_Technology公司的发展小趣事

1977年,伦敦大学内,四个富有远见的科学家怀揣着梦想,创立了City Technology公司。他们利用Wolfson研究所开发的电化学技术,着手研发新型氧气感应技术。这一创新技术的诞生,标志着City Technology在气体传感领域的初步尝试,并为其日后的腾飞奠定了坚实的基础。在接下来的几年里,公司不断突破技术瓶颈,其铁罐氧气传感器技术于1982年获得了英国皇后奖技术成就奖,这一荣誉不仅肯定了公司的技术实力,也为其在市场上赢得了良好的声誉。

Astro Tool Corp公司的发展小趣事

在市场竞争日益激烈的背景下,Astro Tool Corp公司始终坚持以创新驱动发展。公司不断投入研发资金,引进先进技术和设备,推出了一系列具有创新性和竞争力的新产品。这些产品不仅满足了客户日益多样化的需求,也为公司带来了可观的利润。同时,公司还注重人才培养和团队建设,打造了一支高效、专业的研发团队,为公司的持续发展提供了有力保障。

芯佰微(Corebai)公司的发展小趣事

芯佰微始终将品质管理作为公司的核心工作之一。公司建立了严格的质量管理体系,从原材料采购到产品生产、测试、包装等各个环节都进行严格的质量控制。同时,芯佰微也非常注重客户服务,始终将客户的需求放在首位,及时解决客户在使用过程中遇到的问题。这些措施使得芯佰微赢得了客户的广泛信任和好评。

AMICC [AMIC TECHNOLOGY]公司的发展小趣事

作为一家具有社会责任感的企业,AMICC始终关注环境保护和可持续发展。公司在生产过程中积极采用环保材料和技术,降低能耗和排放。同时,AMICC还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实的基础。

这五个故事只是AMICC发展历程中的一部分,但它们足以展现出这家企业在电子行业中的拼搏和成长。AMICC以其坚定的信念、不懈的努力和持续的创新精神,在激烈的市场竞争中脱颖而出,成为了一家备受瞩目的优秀企业。

Euroquartz公司的发展小趣事

Euroquartz自创立之初,就将产品质量和客户满意度置于公司运营的核心。为了确保这一点,公司引入了完整的AS9100 Rev D质量体系,并通过了相应的认证。这一体系要求Euroquartz在制造程序和可追溯性方面保持完整的记录,审批机关会定期进行审核,确保品质始终如一。这种对品质的执着追求,为Euroquartz赢得了客户的信赖,也为公司的发展奠定了坚实的基础。

Bel Power Solutions公司的发展小趣事

Bel Power Solutions的创立源于对电源转换和管理技术的深刻理解和创新追求。公司创始人们看到了电力电子技术在各个行业领域的广阔应用前景,并决心打造一个专业、高效的电源解决方案提供商。然而,在创立初期,公司面临着资金短缺、技术难题以及市场竞争的严峻挑战。但创始人们凭借坚定的信念和不懈的努力,逐步攻克了技术难关,推出了首款电源转换产品,初步在市场上站稳了脚跟。

问答坊 | AI 解惑

学习C语言,进阶高手必备

你必须知道的495个问题-----高手必备 学习C语言,进阶高手必备 需要的就来下载吧,这是我搜集的,自认为还不错!!!…

查看全部问答>

将DBF里的BOXNO字段内容显示到屏幕【求助】

#include #include         #include #include #include \"Header.h\" extern char msg[60]; extern char worker[21]; extern char address[21]; //====================================================== //主 ...…

查看全部问答>

驱动,串口设备绑定

在没有设备名称情况下,用PDEVICE_OBJECT IoAttachDeviceStack(IN PDEVICE_OBJECT SourceDevice,                                 & ...…

查看全部问答>

LabWindows/CVI开发的软件能在ARM9上运行吗

项目要求用NI公司的LabWindows/CVI开发一个应用软件,在ARM9平台上运行,ARM开发版是SBC-2410X,操作系统为WinCE.想问一下用CVI开发出来的软件能不能在该平台上运行.我知道ARM9有很多家公司生产,CVI开发出来的软件在所有ARM9上都能 ...…

查看全部问答>

负反馈不能产生自激振荡?

模电书上说在负反馈放大电路中,输入信号为零时,因为某种电扰动(如合闸通电),其中含有频率为f0的信号,使得AF的附加相移达到180°或-180°,@负反馈变成了正反馈,如果|AF|>1,则产生了自激振荡。我不明白的是,如果@处条件不成立,也就是不存 ...…

查看全部问答>

C8051F tools

新华龙官网找到的一些工具http://www.xhl.com.cn/   …

查看全部问答>

把小弟这两天DIY的过程分享一下,顺便晒一晒第二块板子O(∩_∩)O~

前两天做了个小板子,算是练了练手,承蒙大家夸奖 正好要开始做第二块板子,看到有朋友问了,就把过程也写一下吧,谈不上经验,大家姑且看看;P   首先是打印: 我用的是硫酸纸,按理说阻焊应该是打在菲林上的,但是出去转了一圈没有愿意 ...…

查看全部问答>

各种整流电路图解分析

各种整流电路图解分析…

查看全部问答>

[S3C6410学习心得之一]ok6410开发板基于Ubuntu9.10开发环境搭建-串口

  系统:Ubuntu9.10开发板:飞凌OK6410    最近购入一块新的开发板,芯片是基于三星的S3C6410,ARM11,使用之后发现,速度果然很不错,跟ARM9的S3C2440不可同日而语。飞凌的开发板质量很不错,跟友善之臂相比,谁比较好一目了 ...…

查看全部问答>

modelsim后仿真问题

modelsim可以前仿真,但是不能后仿真,是软件问题还是没有破解完全?我敢保证仿真过程的操作一定正确。…

查看全部问答>