TMS320C6000系列DSP程序开发课件.pptVIP

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TMS320C6000系列DSP程序开发课件

;4.1.1 TMS320C6000系列DSP的C语言特点 1.标识符和常量 标识符的所有字符都是有意义的并且区分大小写,此特征适用于内部和外部的所有标识符; 源(主机)和执行(目标)字符集为ASCII码,不存在多字节字符; 字符常量或者字符串常量中的十六进制或者八进制转义序列或者字符串常量具有高达32位的值; 具有多个字符的字符常量按序列中的最后一个字符编码,例如:‘abc’=‘c’。 ;2.数据类型 表4-1列出了TMS320C6000编译器中各种标量数据类型、位数﹑表示方式及取值范围,许多取值范围的值可以作为头文件limits.h中的标准宏使用。 ;;5.声明 (1)寄存器存储类对所有的chars﹑short﹑integer和pointer类型有效。 (2)结构体成员被打包为字。 (3)整数类型的位段带有符号,位段被打包为从高位开始的字,并且不能超越字的边界。 (4)中断关键字interrupt只能用于没有参数的void型函数。 6.预处理器 预处理器忽略任何不支持的#pragma伪指令。;;;2.cregister关键字 当对一个对象使用cregister关键字时,编译器将比较对象名和TMS320C6000的标准控制寄存器列表,如果名字匹配,编译器将参照控制寄存器产生相应的代码。如果不匹配,编译器将产生一个错误。控制寄存器列表见表4-2。 ;;;;;;;;;;;;;;;;;;;;;;4.5.1 C/C++代码的编写 1.数据类型 当编写C代码时,需要对数据类型的尺寸仔细的考虑。TMS320C6000编译器的每种数据类型尺寸如下(包括有符号和无符号类型): (1)char(字符型):bit (2)short(短整型):16bit (3)int(整型):32bit (4)long(长整型):40bit (5)float(浮点型):32bit (6)double(双精度型):64bit ;基于每种数据类型的尺寸,在编写C代码时应遵循以下的规则: (1)避免在代码中将int和long类型作为相同的尺寸来处理,因为TMS320C6000编译器对long类型的数据使用40位操作。 (2)对于定点乘法输入,应尽可能使用short类型的数据,因为该数据类型为TMS320C6000的16位乘法器提供最有效的使用。 (3)对循环计数器使用int或者unsigned int数据类型,而不使用short或者unsigned short类型,避免不必要的符号扩展指令。 ;2.分析C代码的性能 使用以下手段可以分析特定代码段的性能: (1)代码性能的主要衡量方法之一是代码运行所占用的时间。使用C语言中clock()和printf()函数具有计时和显示特定代码的功能,为了达到这一目的,利用独立的软件模拟器运行这段代码。 (2)利用动态调试器(debugger)中的profile模式,可以得到一个关于代码中特定代码段执行情况的统计表。 (3)使用动态调试器中的中断﹑clk寄存器和RUNB命令可以跟踪特定代码段所占用的CPU时钟周期数。 (4)在代码中影响性能的主要代码段通常是循环。优化一个循环,最容易的方法是抽出此循环,使之成为一个单独的可重新编写﹑编译和运行的文件。 ;;下面通过举例说明存储器相关性的概念。例4.6给出了基本矢量和C代码,图4-1给出了其相关图。 ;;2.软件流水 软件用于安排循环指令,使循环的多次迭代以并行方式执行。当使用编译器的-o2和-o3选项时,编译器使用软件流水优化源代码并且从程序中收集相关的优化信息。图4-2为循环的软件流水示意图。 ;;;;(4)投机执行(-mh选项) 在循环嵌套中,只对内层的循环进行软件流水。软件流水的限制如下: 软件流水可以包含内核函数,不能包含函数的调用; 循环中不能有条件中断; 循环中不能有递增循环计数器; 循环体内不能修改循环计数器,因为在循环中修改循环计数器不能将其转换为递减计数的循环; 循环代码量不能过大,因为代码量过大,需要的寄存器超过TMS320C6000的规定个数不能进行软件流水; 寄存器的值生命周期不能太长,否则不能进行软件流水; 循环中不能有复杂的条件代码,如果过于复杂则循环不能进行软件流水。 ;4.6.1 在C/C++代码中调用汇编语言模块 C/C++代码可以访问定义在汇编语言中的变量和调用函数,并且汇编代码可以访问C/C++的变量和调用C/C++的函数。汇编语言和C/C++语言接口需遵循如下的规则: 所有的函数,无论是使用C/C++语言编写还是汇编语言编写,都必须遵循寄存器的规定。 必须保存寄存器A10~A15、B3和B10~B15,同时还要保存A3。如果使用常规的堆栈,则不需要明确保存堆栈。换句话说,只要任何被压入堆栈的值在函数返回之前被弹回,汇编函数就可以自由使用堆

文档评论(0)

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

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

1亿VIP精品文档

相关文档