- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C6000 DSP系统的软件设计
C/C++代码编写的优化 编写代码时,要认真考虑数据类型的长度。C6000编译器对每种数据类型都定义了一个长度(包括有符号类型和无符号类型): char 8位 short 16位 int 32位 long 40位 float 32位 double 64位 编写C程序时应遵循规则 避免在代码中将int和long型作为同样尺寸处理,因为C6000编译器对long型数据使用40位操作。 对于定点乘法输入应尽可能使用short型数据。因为该数据类型可以最有效地利用C6000的16位乘法器(short*short仅用1个指令周期,而int*int需要5个指令周期!)。 对循环计数器使用int或unsigned int类型,而不使用short或者unsigned short类型,以避免不必要的符号扩展指令。 当使用浮点器件如C67xx的浮点指令时,使用-mv6700编译器开关选项,以使所产生的代码利用浮点的硬件而不是定点的硬件完成任务。例如,用RTS浮点乘而不是MPYSP指令。 使用C64xx器件时,使用-mv6400编译器开关选项,以使所产生的代码利用C6400增加的硬件资源和指令集 C/C++ 代码性能分析 初步测定代码运行所花费的时间。使用C/C++语言中的clock()和printf ()函数可计时和显示特定代码的性能。可利用独立的软件模拟器(load6x)运行这段代码。注意要扣除调用函数clock( )的开销。 利用独立模拟器中的profile剖析模式。用-mg编译程序,用-g来运行load6x。分析结果将存在扩展名为.vaa的文件中。 使能Code Composer debugger中的时钟,使用剖析点和RUNB命令跟踪特定代码段所占用的CPU时钟周期数。可以用View Statistics来获得占用的周期数。 在代码中影响性能的主要代码段通常是循环。优化一个循环,最容易的方法就是抽出这个循环,使之成为一个单独文件,对其进行重新编写、重新编译和用模拟器load6x单独运行。 编译C/C++代码时的优化 为了使C/C++代码获得最好的性能,可以使用编译选项、软件流水、内联函数和循环展开等方法来对代码进行优化,以提高代码执行速度,并减小代码尺寸。 C6000编译器提供了对高级语言的支持,可将C/C++代码转换成更高效率的汇编语言源代码。 利用编译器选项 编译器选项控制着编译器的操作。下面将说明与性能、优化、代码长度相关的推荐选项,并讨论优化与性能之间的关系。 参考表5-9 ~ 表5-13 存储器相关性 为使代码达到最大效率,C6000编译器将尽可能将指令安排为并行执行。为使指令并行操作,编译器必须确定指令间的相关性,即一条指令必须发生在另一条指令之前。只有独立的指令才能并行执行,相关的指令禁止并行执行。 进行程序级优化(-pm选项) 可以通过联合使用-pm和-o3来指定程序级优化。在该过程中,所有源代码在编译过程中将编译成一个中间文件以给编译器一个完整的可视程序。对于确定指针位置传到函数时有着突出的优点。一旦编译器确定两个指针不访问同一个存储空间,可以在软件流水中取得很大的改进。因为编译器访问整个程序,它将进行几个附加的、在文件级优化中很少见的优化。 C/C++代码的进一步优化 通过下述方法改进C语言程序,可使编译出的代码性能显著提高: 使用内联函数(intrinsics)替代复杂的C/C++代码。 使用字(word)访问存放在32位寄存器的高16位和低16位字段的数据。 使用双字访问存放在64位寄存器的32位数据(仅指C64xx/C67xx)。 六、C6000 DSP系统中断编程 DSP通常工作在包含多个外界异步事件的环境中,当这些异步事件发生时,DSP应该及时执行这些事件所要求的任务。 中断就是让CPU暂停当前的工作,转而去处理这些事件,处理完以后再回到中断的地方继续原来的工作。 中断类型和中断号 优先级 中断名 中断类型 最高 最低 复位 复位 NMI 非屏蔽 INT4 可屏蔽 INT5 可屏蔽 INT6 可屏蔽 INT7 可屏蔽 INT8 可屏蔽 INT9 可屏蔽 INT10 可屏蔽 INT11 可屏蔽 INT12 可屏蔽 INT13 可屏蔽 INT14 可屏蔽 INT15 可屏蔽 中断向量表 中断向量表(Vector Table)又叫做中断服务表(Interrupt Service Table,IST)。处理器复位,程序加载后,寄存器初始化为默认值,程序计数器(Program Counter, PC)设置为复位向量(通常为0),同时CPU开始从地址0运行代码。这个位置是复位向量(reset vector),而中断服务表也从0地
文档评论(0)