MCU软件基准测试实用技巧:编译器优化能力评测指引

发布者:EE小广播最新更新时间:2021-12-14 来源: EEWORLD作者: IAR Systems关键字:MCU  编译器  IAR 手机看文章 扫描二维码
随时随地手机看文章

在MCU开发和应用中,工程师都需要进行MCU的能力测试,通用的做法是用Benchmark(基准)程序来测试。然而,在做基准测试时,编译器的优化能力也在测试结果中有较为明显的影响,同一套硬件平台,选用不同的编译器和不同的优化选项,可能得出的结果相差较大。


为了最大程度释放MCU的性能,在基准测试中取得最理想的结果,往往需要工程师不仅对自身的硬件比较了解,更需要深入了解编译器的优化原理,并灵活应用,才能在基准测试中发挥出MCU的全部性能。IAR Systems作为全球知名的嵌入式工具厂商,其编译器在优化能力上有独特的优势,MCU配合IAR的编译器往往能够得出较好的基准测试结果。


本文以已在MCU领域内广泛使用的IAR Embedded Workbench开发工具套件为例,来分享MCU软件基准测试应该注意的项目和以下技巧,从而帮助读者能够去生成业内最高效和最完备的代码。利用以下项目和设置,工程师可以精准调整优化等级,最大限度地进行测试和提升所开发和应用代码的性能。

 

image.png


选择代码尺寸还是执行速度


利用IAR Embedded Workbench等开发工具套件,工程师可以对整个工程范围或对单个文件设定优化级别和类型。在源代码中,甚至可以对单个函数使用 #pragma optimize 指令来完成此操作。


优化的目的是减少代码尺寸和提高执行速度。如果只能满足其中一个目标,编译器会根据用户指定的设置进行优先处理。因此,在实际的软件基准测试中,工程师可以尝试各种设置来获得最佳效果。举个例子,由于函数内联更侧重于执行速度的优化,相较于采用通用代码尺寸优化设置,采用函数内联与通用代码执行速度优化设置将获得更小的程序代码。


 image.png


选择小型内存模型


为了能够充分地发挥MCU器件的性能和减少应用中的问题,软件开发必须充分考虑MCU器件的内存等资源限制,因此需要为目标器件和项目选择尽可能小的内存模型。小型内存模型的优点包括:


更小尺寸的地址

更小尺寸的指令

更小尺寸的指针

效率更高

代码更少


诸如IAR Embedded Workbench这样的成熟的开发工具套件也集成了相关评估功能,可以对内存模型进行多方面评估,从而帮助工程师去测试软件的规模和优化设计。

选择合适的运行时库


默认情况下,运行时库是以最高代码尺寸优化级别进行编译的。如果您想要对速度进行优化,请考虑重新编译生成这些库。可以通过配置选项来设置某些标准库功能(如语言环境、文件描述符和多字节)最适合的级别。


根据具体需求,在库选项中选择 scanf 输入和 printf 的格式。默认选项并非最小格式。


 image.png

 image.png



使用正确的数据类型


数据类型与代码尺寸或者执行速度息息相关,因此需要利用开发工具来对数据类型进行观察和分析,以便找到适合硬件资源的类型。在IAR Embedded Workbench开发工具套件中,开发人员可以从以下几个方面着手进行测试和优化:


选择最适合您应用程序的的数据类型尺寸

尽量使用无符号字符型,这样就能执行位操作而不是算术操作

 

检查目标特定选项


检查能提高性能的目标特定选项,这在日常的MCU设计和应用开发中往往需要工程师具有相当的经验,但是通过使用诸如IAR Embedded Workbench这类成熟的开发工具套件则可以快速而完善地完成必要的性能检查:


高效的寻址模式——可实现高效的内存访问

使用特定的寄存器来处理常量/变量——代码在寄存器上的操作效率比在内存上更高

偶对齐函数入口——偶对齐指令可以提高速度

字节对齐对象——更小的存储空间需求,但可能生成更大的代码尺寸


使用基准测试相关代码


所有的MCU开发工具都应该提供基准测试相关代码,但是成熟的通用开发工具的代码库都是这些提供商在相关领域经验的浓缩,因此更为全面和高效。其中的重要经验包括:


嵌入式系统的基准测试应该针对嵌入式程序的特点来设计。

实际的应用程序通常也适用于基准测试,但需要确保代码的可执行性。链接器会删除未引用的代码和变量,但并非所有的链接器都具备这种功能。

确保测试代码不受测试工具(测试相关函数)的影响。以下示例其实是对 printf() (测试相关函数)进行了基准测试。

 

image.png


比较链接后生成的代码。一款编译器可能会采用内联代码,而另一款编译器可能会调用库。

充分了解用于执行基准测试的应用代码!


总结


通过使用诸如IAR Embedded Workbench这类成熟的开发工具套件,发挥其在几十年全球性应用中行汇聚和迭代出的知识,MCU设计和应用开发工程师可以快速完成上述这些必要的性能测试,同时也可以进一步有针对性地发挥MCU的性能,从而实现目标器件最优化的、软硬件合一的功能。


关键字:MCU  编译器  IAR 引用地址:MCU软件基准测试实用技巧:编译器优化能力评测指引

上一篇:可自定义的片上外设颠覆传统逻辑,TI助力工程师发挥创造力
下一篇:如何在SimpleLink CC3220SF MCU上实现人工智能人员检测?

推荐阅读最新更新时间:2024-11-16 21:34

ST 发布新STM32G0微控制器,增加USB和CAN接口和更大存储器
意法半导体发布新STM32G0微控制器,增加USB-C全速双模端口、CAN FD接口和更大容量的存储器 中国,2021年7月8日——意法半导体 STM32G0* 系列Arm® Cortex®-M0+ 微控制器 (MCU)新增多款产品和更多新功能,例如,双区闪存、CAN FD接口和无晶振USB全速数据/主机支持功能。 对于注重预算的应用,新的STM32G050超值产品线、STM32G051和STM32G061主流产品线增加了丰富的模拟功能和最大容量18KB 的 RAM存储器,以及多达 48 引脚且售价极具竞争力的封装。 此外,STM32G0B0 超值产品线、STM32G0B1和STM32G0C1主流产品线给STM3
[单片机]
ST 发布新STM32G0<font color='red'>微控制器</font>,增加USB和CAN接口和更大存储器
单片机12V数控电源
这次做的数控电源设计思想没什么新意,就是一个数模转换(ADC0809)和一个模数转换(DAC0832),再加上两个单片机分别控制0809和0832,组成一个反馈网络,来得到输入的数字相对应的电压,电压范围很小,只有0~12.75V.显示部分采用四段共阴数码管 整块板子做出来之后有10*7cm那么大,用洞洞板焊的. 实测电路输出精度+/-0.05V在12V范围内. 硬件设计: 第一块单片机P0口接数码管代码段的驱动,P2.4~P2.7接四位的位选线,P2.0~P2.3节四个独立操作按键 ,P1口接ADC0809的八位数据输出.P3.0~P3.3口接0809的控制线.P3.5~P3.7和第二块单片机的P2.0
[单片机]
<font color='red'>单片机</font>12V数控电源
51单片机串口调试程序一列
51单片机串口调试程序一列 /*定义为中断方式串口处理*/ #define INTERSENDSTR /*不为8032系列芯片 */ //#define CHIP_8032 #i nclude absacc.h #i nclude reg51.h #i nclude string.h #i nclude err.h #ifdef INTERSENDSTR unsigned char xdata sSendComBuf ,sRecComBuf ; unsigned char data bOut,bIn,bSout,bSin; #else #define DEFSENDCHAR TI=0;SBUF=ACC;while(!T
[单片机]
单片机最小零碎[配图][超具体]
为什么称之为单片机最小零碎呢?单片机最小零碎,也叫做单片机最小使用零碎,是指用起码的原件构成单片机可以任务的零碎。单片机最小零碎的三要素就是电源、晶振、复位电路,如图 2-1 所示。 图 2-1 单片机最小零碎电路 这张最小零碎的电路图节选自我们的 KST-51 开辟板道理图,下面我们就照这张电路图来详细剖析最小零碎的三要素。 1) 电源 这个很好了解,电子装备都需求供电,就连我们的家用电器(手电筒^_^)也不破例。今朝主流单片机的电源分为 5V 和 3.3V 这两个规范,当然如今还有对电压请求更低的单片机零碎,普通多用在一些特定场所,在进修中我们不做过多的存眷。 我们所选用的 STC89C52,它需求 5V 的供电零碎
[单片机]
<font color='red'>单片机</font>最小零碎[配图][超具体]
51单片机pwm信号模拟
适用所有单片机,晶振为11.0592M #include reg52.h int pwm1=1; 第一路pwm占空比 int pwm2=60; 第二路pwm占空比 sbit led1=P1^0; sbit led2=P1^3; sbit md1=P1^0; void pwm_init() { TMOD|=0x01; TH0=(65536-100)/256; 约1Kmz TL0=(65536-100)%256; ET0=1; EA=1; TR0=1; } void pwm_timer()interrupt 1 { static int c1=0,c2=0; TH0=(65536-100)/256;
[单片机]
串行接口键盘控制器SK5278及其在单片机系统中的应用
摘要:SK5278是一种可管理16个按键的键盘控制器,该器件内部具有去抖动处理电路,可直接输出按键的键值编码,并采用串行方式与单片机或微处理器进行接口,使用该器件可简化单片机系统软硬件的键盘接口。文中给出了该器件的特点、管脚说明和使用方法,并以AT89C2051单片机为例给出了相应的接口电路及相应程序。 关键词:键盘控制 串行接口 单片机 SK5278 对于以单片机为核心构成的智能仪器、仪表、工控设备及家用电器而言,构成人机交互的键盘接口电路是必不可少的,而相应的键盘管理软硬件设计却比较麻烦。简单的矩阵键盘存在着占用CPU软硬件资源多、响应速度慢、监控软件编制复杂等问题,专用的键盘接口器件如INTE8279、HD7219又往往
[应用]
AT89S52单片机基础知识详解
性能说明: AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程Flash存储器。它是使用Atmel公司高密度非易失性存储器技术制造,并与业界标准80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,也就是适合于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活及非常有效的解决方案。AT89S52单片机提供一下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。此外,AT89S52单片
[单片机]
GD32 MCU机械按键状态的识别
GPIO口的输入功能-机械按键状态的识别 硬件: 深圳标航科技有限公司 暴风 开发板 处理器:GD32F103VET6 开发环境:MDK(keil 5) + STM32CubeMX 1.1 GPIO口的输入的作用 输入,其意是指将处理器外部的逻辑信号0或者1输入到处理器的内部。输入是每一个处理器的IO引脚的基本功能。利用处理器的输入功能我们可以获取外部电路的状态,进而做出进一步的判断。GPIO的输入功能的典型应用是获取机械按键的状态—判断按键是按下还是弹起。 1.2 机械按键状态的识别 1.2.1 机械按键电路的设计 按键有两个状态,一个是按下一个是弹起。通过巧妙的电路设计,会使得按键的按下与弹起时IO引脚的逻辑电平不一样。通
[单片机]
GD32 <font color='red'>MCU</font>机械按键状态的识别
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved