DS函数执行时间自动测试方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE 1 DS函数执行时间自动测试方法   【摘要】在进行DSP函数级的优化中,首先需要确定哪些函数占用CPU最多。以TIC64x+DSP为例,描述了如何利用TI集成开发环境及相关的配套脚本分析工具,实现大量函数执行时间自动测试的方法,该方法效率高,并且可获得函数运行的各类信息,为软件的函数级优化提供了充分依据。   【关键词】DSP函数;执行时间;软件优化;自动测试   1.前言   DSP软件优化是DSP软件开发人员经常面临的课题。虽然TI的集成开发环境CCS提供了丰富的优化手段,但在产品开发阶段,考虑的比较多的往往是代码的可读性、正确性以及调测的方便,而函数执行效率方面不一定能全面照顾到,从而在后期面临代码优化工作。   在一个复杂的DSP系统上运行的软件工程函数众多,软件优化除了文件级优化之外,往往需要对某些重点函数进行优化。而如何从大量的函数中准确的提取出执行效率低、占用CPU资源多的重点优化函数,成为函数级优化之前的首先要解决的问题。以往测试函数执行时间,一般在函数前后添加记录时间点的测试代码,在Emulator环境或真实环境中跑一下测得函数执行时间,或者在Simulator环境下使用CCS提供的Profile功能,测得函数执行占用的cycle数。无论哪种方法,都只能逐个函数进行,效率低下,而且不能直接得出函数执行频率这一优化需要参考的重要指标(因为有些函数虽然执行消耗cycle很多,但其执行次数少,也不是占用CPU的主因)。如果对各函数的执行频率进行理论上的计算,再结合打点测试结果做通盘的比较,做起来也是效率低,而且面临与实际可能有较大出入的问题。   2.函数执行时间测量   利用TICCS3.3(6.1.12版本以上)集成开发环境自带的函数进出钩子(Functionentry/exithooks)的新功能,可以方便的实现整个软件工程运行过程中执行到的全部函数(库函数及inline函数除外)进入和退出时间点的记录,再配合相关的脚本分析工具,很快一张所有运行到的函数执的行时间和执行次数的汇总表,便呈现在眼前。   2.1编写函数进出钩子(hook)函数,构造测试工程   钩子函数的功能,是在函数进入和退出时进行调用,记录下函数指针和进出的时间点,保存在一片专门开辟的内存空间。这片空间在这里我们称之为“hook信息记录区”。hook信息记录区大小可以自己根据需要制定。如果占用内存空间往往比较大,可存放在片外DDR2内存空间。在hook信息记录方式上,由于后续配套分析脚本的需要,采用顺序记录(而不是循环记录)的方式。另外由于钩子函数调用极其频繁,编写时需要注意提高hook函数的执行效率。Hook函数主要包括初始化函数、进入函数时调用的hook函数以及退出函数时调用的hook函数。下面是一个进入函数时调用的hook函数代码(其中gaqRecord[]数组空间就是hook信息记录区);退出函数时调用的hook函数,可以跟FuncHookEnter相同,也可以不同,相同时可以直接用FuncHookEnter。   本例中,将FuncHook.c文件加入到DSP软件工程中,并使用-o3优化(提高执行效率)。并修改DSP工程的编译选项,登记钩子进出函数,具体设置方法为,打开BuildOptions   对话框,选中Compiler-Category-Advance(2),然后在“Entryhookfunction”一栏中填入自己定义的进入函数的钩子函数名称,例如此处填入FunHookEnter,“Caller’sparametertopass”从下拉框中选择“address”,退出函数的hook函数的设置一样[1-2]。   由于hook信息记录区大小有限,而且采用顺序记录的方式,hook信息记录区很快就记录满了,之后便停止记录,因此,在记录时可以通过对索引变量进行了判断,该索引初始化为不记录,在做好一切准备工作(如DSP加载后,把系统功能都运行起来)之后,通过一个调试开关,在idle任务执行函数中检测到该开关变为CTRUE后,将索引置为0,开始记录hook信息。另外,该idle任务函数执行很频繁,实际测试一般不需要记录该函数的进出时间信息,所以可以使用#pragmaNO_HOOKS将该函数屏蔽掉。   2.2脚本工具自动化分析记录的数据   编译测试工程,生成DSP版本并加载运行,做好准备工作(如运行特定功能)之后,通过调试命令的方法将gudRecordIdx索引置0,开始触发记录hook信息。记录区满后(可以通过读取gudRecordIdx变量值来确认),将hook信息记录区(即:gaqRecord[]数组)读出,传送到后台PC机保存生成一个dat文件。   由于hook信息记录是记录区写满后即停止,

文档评论(0)

yingzhiguo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档