- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在算法移植之后,必不可少的工作就是算法的优化。针对DSP的特点,如果同时运行多个运算单元,随之而来的可能就是算法效率的下降。因此,算法的优化变得至关重要。同时,ARM和DSP间的通信也是要关注的问题。在算法调用时,DSP和ARM之间如何同步,诸如此类的问题,都属于ARM和DSP之间的通信问题。在本章中将会一一给出答案。 DSP通常有几个运算单元可以一起工作,因此可以用来进行比较复杂的运算。在DSP的程序中,汇编代码的效率最高,但是汇编代码由于可读性、可修改性和可移植性比较差,而且开发的时间也比较长,因此通常用来编写DSP的启动代码,其余大量代码一般还是倾向于使用C语言来构建。C语言非常灵活,关键是非常利于移植。即使如此,也需要对算法和代码进行优化。 算法和代码的优化工作主要包括数据类型优化、数值操作优化、快速算法使用、变量定义和使用方法优化、函数调用优化、程序流程优化以及计算表格优化等。 8.1.1 数据类型的优化 不同的嵌入式系统对数据类型的定义可能是不一样的,比如int类型的变量,在有些系统中是32位的,在另一些系统中则可能是16位的。因此,在写代码的时候,使用预编译宏typedef将数据类型重新定义,移植的过程就会比较方便,只要更改这些宏定义便可。例如在DM6467中就有如表8.1所示的宏定义。 表8.1 数据类型宏定义 在编程中还要注意变量的变化范围,以及变量是signed还是unsigned,因为不同的系统和硬件平台对数据类型的默认定义是不同的。比如在PC上的Visual C++中,默认char是unsigned char,但在TI公司的一些DSP系统中,默认char是signed char,如果没有注意到这一点,在移植过程中就会遇到相当多的麻烦。 另外,在代码的生成过程中,除非系统有浮点协处理器或专门针对浮点运算设计的处理器,否则不要使用浮点数和浮点数运算。因为浮点数会占用很大的内存空间(IEEE单精度浮点需4 Byte,双精度需8 Byte),而且运算非常慢,即使有专门的协处理器的支持,通常还是会比定点运算更花时间。 最后需要对short型数据进行int处理。C64x的DSP具有双16位扩充功能,芯片能在一个周期内完成双16位的乘法、加减法、比较、移位等操作。在设计时,当对连续的short型数据流进行操作时,应该转化成对int型数据流的操作,这样一次可以把两个16位的数据读入到一个32位的寄存器中,然后用内部函数来对它们进行处理,充分运用双16位的扩充功能,速度将提升一倍。 8.1.2 数值操作的优化 数值操作的优化,主要采用以下几种方法: (1) 用比特的移位操作来代替二次幂整数的乘除法运算。DSP上的乘法器数量有限,但是通常有较多的运算单元可以进行移位运算,因此,尽量把乘法转化为移位,可提高整个系统运算单元的复用率,从而提高执行效率。除法是DSP的代码中最需要避免的运算,因为DSP系统一般不提供单周期的除法指令,为此必须采用除法子程序来实现。二进制除法是乘法的逆运算,乘法包括一系列的移位和加法,则除法可分解为一系列的减法和移位,但这样做显然会非常慢。一般的做法是把除法改为乘上一个数,再进行一次移位。 (2) 多用查表法。如果内存情况允许,在程序中将一些运行时计算的参数做成查找表或常数数值,这样可以将运行时的计算转化为编译时的计算,虽然增加了一些内存的需求,但是大大提高了运算效率。 (3) 有效地使用协处理器,减小定点处理单元的负担。要充分利用系统中的协处理器或硬件加速器,减轻主处理器的负担,通过并行来提高效率。通常来说,协处理器处理能力比较专一,而且处理能力不亚于主处理器,甚至更优,因此如果系统中有可以使用的这一部分资源,开发时要好好利用。 (4) 尽量避免数值的上下溢出,除非是算法本身的需要。事实上算法中使用对溢出的处理操作是一个比较冒险的做法,尤其是代码可能要往不同的系统上移植的时候,因为不同的系统对溢出和饱和运算的处理可能是不一样的,在一个系统上顺利运行的算法,移植到另一个系统上可能就会出错。 8.1.3 变量定义及使用的优化 C语言把函数的局部变量放在栈中,对局部变量的访问是间接的,需要通过偏移量寻址,因此较慢。更为有效的方法是将变量放在堆(heap)中,一般有两种方法来实现:一种是声明为全局变量;另一种是声明变量为static。同时,要注意提高全局变量的重复利用率。 对于需要多次重复访问的变量,如for循环中的变量,可以设置为register变量,编译器会给它分配一个硬件寄存器。声明变量为register能够提高效率, 但必须小心使用,因为编译器不一定百分之百地把用户定义的register变量对应到硬件寄存器,在系统资源不
您可能关注的文档
- C语言编程技巧分析 作者 kj第3章 循环结构编程技巧分析.ppt
- C语言编程技巧分析 作者 kj第4章 数组编程技巧分析.ppt
- C语言编程技巧分析 作者 kj第6章 预处理编程技巧分析.ppt
- C语言编程技巧分析 作者 kj第8章 结构体共用体和枚举类型以及链表编程技巧分析.ppt
- C语言编程技巧分析 作者 kj第9章 位运算编程技巧分析.ppt
- C语言程序设计(第二版) 作者 978-7-302-32355-6 kj-第1章C语言概述.ppt
- C语言程序设计(第二版) 作者 978-7-302-32355-6 kj-第2章数据类型、运算符和表达式.ppt
- C语言程序设计(第二版) 作者 978-7-302-32355-6 kj-第6章数组.ppt
- C语言程序设计(第二版) 作者 978-7-302-32355-6 kj-第8章预处理命令.ppt
- C语言程序设计(第二版) 作者 978-7-302-32355-6 kj-第9章指针.ppt
- Delphi 2005程序设计教程 作者 第1章 认识Delphi 2005.ppt
- Delphi 2005程序设计教程 作者 第4章 Object Pascal的高级技术.ppt
- Delphi 2005程序设计教程 作者 第5章 在Delphi 2005中使用窗体.ppt
- Delphi 2005程序设计教程 作者 第9章 文件管理与配置注册表.ppt
- Delphi 2005程序设计教程 作者 第10章 动态链接库开发.ppt
- Delphi 2005程序设计教程 作者 第12章 Borland数据提供者.ppt
- Delphi 2005程序设计教程 作者 第13章 数据库应用程序开发.ppt
- Delphi程序设计基础 第2版 普通高等教育“十一五”国家级规划教材 张世明 第1章-Delphi集成开发环境.ppt
- Delphi程序设计基础 第2版 普通高等教育“十一五”国家级规划教材 张世明 第7章-工具栏和状态栏设计.ppt
- Delphi程序设计基础 第2版 普通高等教育“十一五”国家级规划教材 张世明 第8章-Delphi图形及多媒体应用.ppt
文档评论(0)