王锐
【摘 要】介绍了德州仪器公司(TI)Code Composer Studio V3.3(CCS V3.3)环境下软件优化配置的方法,在相同环境下,通过比较烧注了调试版(Debug)和发布版(Release)目标码的设备运行时在正确性、信号输出和执行速度等指标方面的差别,提出发布版使用中的一些建议。
【关键词】调试版;发布版;程序优化;执行速度
中图分类号:文献标识码:A
TI公司的数字信号处理器集成开发环境CCS V3.3具有生成调试版(Debug)和发布版(Release)目标码的功能,在多数情况下嵌入式产品烧注的目标码均为调试版,该版本目标码保留有调试信息且未经过编译器优化,会影响程序执行效率和存储空间利用率。发布版可以删除调试信息并使用不同的优化层级来对代码进行优化,使软件执行效率和存储空间利用率得到一定的提升。
本文从开发环境优化工具介绍入手,一步步展开论述,引入了优化效果判定指标,设计了多种优化配置方案,并依据判定指标对不同方案的优化效果进行了测试,得到了完整的测试数据,通过对数据的比较和分析,得出最优配置方案,并给出了不同类型工程下的优化配置建议。
1 软件优化工具介绍
软件开发环境为TI公司的CCS3.3集成开发环境,该环境适用于TMS320F2812 数字信号处理器。针对该DSP的硬件初始化配置略。
软件优化工具为CCS 3.3 中内嵌的C Compiler优化器,该工具支持使用ANSI 标准的C语言编写的软件代码。
C Compiler优化器包含一个可提高代码执行速度和减少程序占用空间的优化程序,该优化程序通过使用简化路径、开启软件流水线、调整声明和表达式位置和将变量分配进寄存器等的操作来实现对代码的优化。
1.1 编译流程
编译过程分为三步:
a)分析器对代码进行分析,完成对源文件的预处理和语法检查,生成编译器内部识别的.if后缀的文件;
b)优化器作为一个可选的路径运行在解析器和代码生成器之间,优化器的输入为.if文件,当启用优化器并完成优化配置后,优化器会对.if文件进行优化并生成与.if文件格式相同但更高效的的文件,称为.opt文件;
c)代码生成器将输入的.if文件或.opt文件转化为汇编语言源文件(.asm)。
1.2 优化选项介绍
对于TEST.pjt工程,未使用嵌入式实时操作系统RTS/BIOS,使用的编程语言仅为C语言,因此影响程序优化的选项为Basic选项,其它后续选项设置为默认值即可。Basic选项详细内容见表1。
2 示例工程介绍
作为示例工程的TEST.pjt,为嵌入式软件,烧注于TI公司的TMS320F2812型数字信号处理器(DSP)硬件平台。软件主要实现大气压力采集及大气参数解算。
3 优化效果判定指标
在工程实际应用中,设备功能的正确实现是根本,然后再兼顾程序运行效率和空间占有率等指标,做到“正确优先,兼顾效率”。
为了对优化的效果作出合理判定,在程序运行正确性、运行时间和生成的目标文件大小等方面进行分析,确定了TEST.pjt工程中以下4个方面的指标作为优化效果判定依据。
3.1 压力数据解算正确性及压力有效性
3.1.1压力数据解算正确性
压力数据的解算是具有代表性的程序运行过程,它包含了对硬件及外设的操作、逻辑和数值运算等方面内容,可以作为软件执行正确性的判定标准。
3.1.2压力有效性
压力有效性的判定原理是通过对与压力数据解算有关数据的判断,以确定计算出的压力数据是否有效可用。可作为压力数据解算正确性判定的有效补充。
3.2 延时函数耗时
延时函数在工程中起到延时的作用,对延时函数耗时的测量可以直观看出在不同优化环境下单位行数的代码的执行速度。
3.3 定时中断服务函数耗时
定时中断服务程序实现产品的主要功能,通过对不同优化配置项下该程序运行时间的比较,可反映出软件执行速度的差异。
3.4 可執行目标文件大小
可执行目标文件是指烧写进硬件平台的嵌入式软件最终格式,其大小可体现出在空间上的优化的差异。
4 优化配置方案介绍及验证
根据工作中不同情况下软件工作的特点,确立了两种优化配置方案,并依据第3章的判定指标对不同方案进行测试和分析,两种方案如下:
a)不改变软件,配置优化器;
b)调整软件结构,配置优化器。
4.1 不改变软件,配置优化器
4.1.1配置原则
不对工程中代码做出调整,在项目级对编译器进行优化配置。
4.1.2优化效果判定及比较
选取三种优化配置方法进行比较分析,三种优化配置方法为:
a)禁止使用调试信息且未使能优化(NoDebug+None);
b)禁止使用调试信息且使能了寄存器级优化(NoDebug+o0);
c)禁止使用调试信息且使能了本地级优化(NoDebug+o1)。
将已通过功能测试且工作正常的配置方法作为参照组。参照组的配置方法为使用调试信息且未使能优化(Debug+None)。
依据优化判定指标,对上述所列每种优化配置方法进行多次测量并取平均值后得到测试结果,见表2。
4.1.3小结
在保证程序正确运行的前提下,本优化配置方案至多可实现寄存器级的优化。优化后程序的运行效率提高,生成的可执行目标文件所占空间减小。
因方法二中延时函数耗时减少较多,会造成延时时长少于设计值,在不对程序作出调整的前提下,与延时相关的数据可能会出现异常。因此,确定方法一为本方案最优配置方法。
4.2 调整软件结构,配置优化器
4.2.1软件结构调整原则
对软件工程的结构进行调整,调整依据以下原则进行。
a)对工程中的函数按照功能进行划分,形成不同的功能模块文件,力求做到工程结构合理,层次清晰;
b)随着优化层级的加深,工程中存在对硬件操作的函数、对外设操作的函数、中断函数以及包含内联汇编的函数在运行时会出现代码执行速度与硬件不匹配的错误。为了避免此类错误发生,将上述类型函数与工程中其它函数分离开来,以便后续单独对其实施优化配置。
4.2.2软件结构调整及优化器配置
TEST.pjt工程的源文件(仅含C、汇编和CMD文件)结构树如图1所示。
依据4.3.1节要求对TEST工程进行结构调整,将原工程中的TEST.c文件按照功能分解为多个C文件,在TEST.c文件中仅保留4.3.1节b)条所述函数,调整后的工程源文件结构树如图2所示。
工程结构调整完成后,对工程中每个源文件进行单独优化配置成为可能。
除TEST.c外的其它c文件主要用于数据解算和逻辑判断,不涉及对硬件的操作、内联汇编及中断,可将此类C文件的优化等级直接配置为文件级(-o3),对TEST.c文件,将该文件配置为不产生调试信息模式(NoDebug),具体优化器配置见4.3.3节。
4.2.3优化效果判定及比较
选取四种优化配置方法进行比较分析,具体方法及配置如下:
a)TEST.C未使能优化(None),剩余C文件使能文件级优化(o3);
b)TEST.C使能寄存器级优化(o0),剩余C文件使能文件级优化(o3);
c)TEST.C使能本地级优化(o1),剩余C文件使能文件级优化(o3)。
将所有文件配置为使用调试信息且未使能优化(Debug+None)作为参照组,参照组已通过功能测试且工作正常。
测试结果见表4。
4.2.4小结
本方案虽然可以保证方法三的正确性,但由于延时函数耗时测试中方法二和方法三表现异常(优化层级加深延时函数耗时反而变长),因此,确定方法一为本方案最优配置方法。
5 优化配置总结
通过第4章的测试及分析得出了每种优化配置方案下的最优配置方法,为了在最优配置方法之间进行比较,需要对测试项设置权重,通过加权计算出最优配置方法,各测试项目的权重设置如下:
a)各方法均通过了3.1节测试,不对该项测试设置权重;
b)延时函数耗时除了在方案一方法一中增大外,在剩下两种方法中均有减小,说明优化会加快代码执行速度,该项权重应适当分配,分配为0.20;
c)各方法下定时中断服务程序耗时均有不同程度减少,软件的主要功能在定时中断服务程序中实现,定时中断服务程序耗时长短可以直观反映出程序运行效率的优劣,权重值应较大,分配为0.55;
d)各方法下生成的目标文件大小均有较大程度减小,体现出优化在空间上的作用明显,该项的权重应给予适当分配,分配为0.25。
将两种最优配置方法的测试结果列表,依据权重计算出加权平均值,形成配置方法对比表,详见表5。
通过表5可以得出如下结论:
方案二方法一的加权平均值最高,特别是定时终端服务程序耗时一项,较参照组减少了9.13%,为最优配置方法,但其对原有代码结构改动较大,适用于新研项目。
方案一方法一的加权平均值最低,优化效果虽然不及之前两种方法,但该方法不修改代码,适用于产品已定型或已完成软件定型测评的项目。
参考文献:
[1]王忠勇.陈恩庆.TMS320F2812 DSP原理与应用技术.北京,电子工业出版社,2012.06
[2]Texas Instruments Incorporated.TMS320C2x/C2xx/C5xOptimizing C Compiler Users guide,Texas,1999.8
[3]Texas Instruments Incorporated.TMS320C281x DSP System Control and Interruptes Reference Guide,Texas,2006.10
[4]顧卫钢.手把手教你学DSP——基于TMS320X281x.北京,北京航空航天大学出版社,2011.4
(作者单位:太原航空仪表有限公司)