TMS320C6000系列DSP编程工具与指南

TMS320C6000系列DSP编程工具与指南"

作者:田黎育、何佩琨、朱梦宁
ISBN:9787302136156
定价:¥70
字数:千字
页数:
出版时间:2006.08.01
开本:
版次:1-2
装帧:
出版社:清华大学出版社
简介

本书基于TI公司的3个文献编译而成,它们分别是TMS320C6000 Optimizing Compiler User’s Guide、TMS320C6000 Assembly Language Tools User’s Guide和TMS320C6000 Programmer’s Guide。

本书详细介绍了C6000的软件开发过程、C环境的实现、编程工具的使用和程序优化方法等方面的内容,涉及了几乎所有在C6000的硬件平台上开发一个完整的软件程序所应用的知识(CCS和DSP/BIOS在本丛书另外的两本中介绍),这些知识是进行C6000软件开发所必须具备的。

本书内容实践性强,适合于研究、开发TI C6000 DSP的工程师和研究人员阅读,同时也可作为相关专业研究生的参考资料。

前言

译  者  序

美国德州仪器公司的TMS320C6000 DSP系列,采用VILW体系结构,有8个功能单元,一个时钟周期最多可以并行执行8条指令。由于功能强大,从它们面市起,即受到业界的注意。 但是,德州仪器公司的资料繁复庞杂,学习比较困难。

2003年5月,德州仪器公司中国大学计划和清华大学出版社组织编译了TI DSP手册,北京理工大学电子工程系的教师接受了翻译与TMS320C6000软件编程有关的用户手册的任务。这些手册包括:《TMS320C6000优化编译器用户手册(TMS320C6000 Optimizing Compiler User’s Guide)》、《TMS320C6000汇编语言工具用户手册(TMS320C6000 Assembly Language Tools User’s Guide)》和《TMS320C6000程序员手册(TMS320C6000 Programmer’s Guide)》。

德州仪器公司资料的版本在不断更新。本书的“TMS320C6000优化编译器用户手册(TMS320C6000 Optimizing Compiler User’s Guide)”是根据[SPRU187K]翻译;“TMS320C6000汇编语言工具用户手册(TMS320C6000 Assembly Language Tools User’s Guide)”,是根据[SPRU186M]翻译。在2004年9月即将交稿时,从德州仪器公司网站发现,这两个手册都有了新版本。经对照,发现新版本的改动很大。在与清华大学出版社曾刚编辑商量后,决定按德州仪器公司新版修改,重新校译。现在交付的译稿,第1篇“TMS320C6000优化编译器用户手册”,原文是TMS320C6000 Optimizing Compiler User’s Guide([SPRU187L]),由田黎育博士主译;第2篇“TMS320C6000程序员手册”,原文是TMS320C6000 Programmer’s Guide([SPRU198G]),由朱梦宇博士主译;第3篇“TMS320C6000汇编语言工具用户手册”,原文是TMS320C6000 Assembly Language Tools User’s Guide([SPRU186N]),由何佩琨教授主译。

本书是手册,不是教材,所以不完全是根据学生和开发人员的学习过程来编排的。我们翻译此书,是想为初学TMS320C6000的学生和开发人员提供一本学习的工具书。虽然英文文档很容易找到,但读中文能够提高效率,这对多数人来说还是一个现实的情况。为了保存原手册面貌,除了页码标注等少数情况外,在翻译时,我们尽量接近原文。由于两种文化的差异,有些地方的翻译相当困难。加之我们水平有限,还有教学科研任务,时间有限,翻译中的不当之处,恳请读者批评指正。欢迎读者把反馈信息发到译者的邮箱:tianliyu@bit.edu.cn。

感谢电子工程系的几名研究生,他(她)们参与了本书的初译工作。他(她)们是:李旻岳、商容容、谢华、袁亮、顾文彬、刘明敬、刘基南、潘涛、江培华、马永刚和刘先康。

最后,还要特别感谢清华大学胡广书教授和清华大学出版社曾刚编辑。在他们大力支持下,我们才能完成本书的翻译。

      

           田黎育 何佩琨 朱梦宇

             2005年1月20日

           于北京理工大学电子工程系

经过全体编译老师和编译委员会近一年的努力,“TI DSP系列中文手册”终于陆续和广大读者见面了。

数字信号处理器(Digital Signal Processing,DSP)是对信号和图像实现实时处理的一类高性能的CPU。所谓“实时(Real-Time)实现”,是指一个实际的系统能在人们听觉、视觉或按任务要求所允许的时间范围内实现对输入信号的处理并将其输出。目前,DSP已广泛应用于通信、家电、航空航天、工业测量、控制、生物医学工程及军事等许许多多需要实时实现的领域。

美国德州仪器(Texas Instruments,TI)公司是全球DSP研发和生产的领先者。自1982年推出第一块DSP芯片以来,到20世纪90年代中期,TI先后推出了C10、C20、C30、C40、C50及C80等6代TMS320系列的DSP产品。紧接着又推出了C2000系列、C5000系列和C6000系列三大主流产品,并推出了将DSP和ARM合为一体的OMAP系列。这些产品无论是在国外还是在国内都获得了广泛的应用。例如,“TI中国大学计划”在2003年举办的“TI DSP设计比赛”中,国内高校就有约90个队参加,足见DSP在我国已经得到普遍的重视。

凡是从事过含有CPU的系统设计(单片机或DSP)的设计人员都知道,为了顺利地实现设计任务,一本或几本好的手册是必不可少的,其中包括该CPU的结构手册、指令和汇编语言手册以及开发手册等。

由于TI的DSP发展迅速,产品更新快,因此其手册自然也非常多。由于手册需要更新和补充,因此,彼此之间难免会出现重复和种类繁多的现象。使用过TI DSP文档的用户都感觉到,其手册在使用上是有相当难度的。另外,TI DSP文档都是用英文写成,这也给部分工程技术人员带来一定的困难。

鉴于此,TI中国主管提出委托国内的高校老师对其文档进行编译,并授权清华大学出版社正式出版。在“TI中国大学计划”的建议下,2003年6月通过推荐和报名方式成立了编译委员会。

通过认真讨论,编译委员会首先确定了文档编译的原则,然后确定了编译的书目,最后确定了每一本书的编译者。

关于编译的原则,我们提出了如下两点:

(1)本文档的定位为“手册”。也就是说,每一位文档的编译者应全面了解和掌握所编译书目的所有英文文档,并了解各个文档之间的关系,在保证文档完整的基础上,选择最新的文档,并去除其中的重复内容和已经淘汰的内容。

(2)要尽可能地按照TI英文文档的“本意”来形成中文,以保证手册的准确性。允许作者按自己的经验有所发挥,以便于难点的理解。

这次编译的书目包含三大部分:一是各个系列的共用部分,如CCS、DSP/BIOS、算法标准、C语言编译器及开发工具等各个手册;二是按C2000、C5000和C6000三大系列分别编译它们的CPU结构及指令手册;三是分别编译它们的应用。

编译计划在“TI中国大学计划”的相关会议上提出后,得到了国内高校许多老师的热情支持,很快便将要编译的书目一一落实。这些老师都有着从事DSP教学和科研的丰富经验,正是由于他们的大力支持,才使这一庞大的工作计划能够付诸实施。在此,谨向参加本系列手册编译工作的全体老师表示衷心的感谢!

“TI中国大学计划”在本系列手册的编译过程中给予了多方面的大力支持,在此向他们表示衷心的感谢!

由于本系列手册的编译工作量大、时间紧,因此,尽管编译老师和编译委员会都尽了最大的努力,但也难免有不妥、甚至错误之处,编译委员会全体老师恳切地希望广大读者给以批判指正。

清华大学生物医学工程系

胡广书    教授   

2004年3月    

目录

目    录

第1篇  TMS320C6000优化编译器手册

第1章  介绍 1

1.1  软件开发工具概述 1

1.2  C/C++编译器概述 3

1.3  CCS(Code Composer Studio)和编译器 5

第2章  使用C/C++编译器 6

2.1  关于编译器 6

2.2  执行C/C++编译器 7

2.3  设置选项改变编译器的行为 7

2.4  设置默认的编译选项(C_OPTION和C_C6X_OPTION) 17

2.5  控制预处理器 18

2.6  理解诊断信息(diagnostic messages) 21

2.7  其他信息 24

2.8  生成交叉引用(cross-reference)列表信息(-px选项) 24

2.9  生成未加工的(raw)列表文件(-pl选项) 25

2.10  使用内联(inline)函数扩展 26

2.11  中断门限选项(Interrupt Flexibility Options)(-mi选项) 29

2.12  把C6400的代码和C6200/6700/旧的C6400的目标代码一起连接 29

2.13  使用交叠工具(interlist feature) 30

第3章  优化代码 32

3.1  执行优化 32

3.2  优化软件流水(software pipelining) 33

3.3  冗余循环(Redundant Loops) 41

3.4  减小代码尺寸(-ms选项) 42

3.5  执行文件级(file-level)优化(-O3选项) 42

3.6  执行程序级(program-level)优化(-pm和-O3选项) 43

3.7  指明是否使用别名技术(aliasing techniques) 45

3.8  阻止相关浮点操作的重新排序(reodering of associative 

floating-point operation) 47

3.9  优化代码中谨慎使用asm语句 47

3.10  自动内联扩展(inline expasion)(-oi选项) 47

3.11  优化时使用交叠工具 48

3.12  调试和剖析(profiling)优化代码 49

3.13  正在执行哪种优化 50

第4章  使用汇编优化器 58

4.1  增强性能的代码开发流程 58

4.2  关于汇编优化器 59

4.3  写线性汇编需要知道什么 59

4.4  汇编优化器伪指令 64

4.5  使用汇编优化器避免存储体(bank)冲突 78

4.6  存储器别名模糊消除(memory alias disambiguation) 83

第5章  连接C/C++代码 87

5.1  通过编译器执行连接器(-z选项) 87

5.2  连接器选项 88

5.3  控制连接过程 90

第6章  使用独立(stand-alone)软件仿真器 95

6.1  运行独立软件仿真器 95

6.2  独立软件仿真器的选项 96

6.3  通过加载器把参数传递给程序 97

6.4  使用独立软件仿真器的剖析功能 98

6.5  选择仿真的硅版本(silicon revision)(-rev选项) 98

6.6  独立软件仿真器的例子 99

第7章  TMS320C6000 C/C++语言实现 101

7.1  TMS320C6000 C语言的特征 101

7.2  TMS320C6000 C++语言的特点 103

7.3  数据类型 104

7.4  关键字 104

7.5  寄存器变量和参数 109

7.6  asm语句 110

7.7  pragma伪指令 110

7.8  连接名(linkname)的生成 120

7.9  静态变量和全局变量的初始化 121

7.10  改变ISO C语言的模式 122

第8章  运行时(run-time)环境 125

8.1  存储器模型(memory model) 125

8.2  对象的表示 128

8.3  寄存器使用规范(register conventions) 134

8.4  函数结构和调用约定 135

8.5  C/C++与汇编语言的接口 137

8.6  中断处理 151

8.7  运行时支持的算术程序(run-time-support arithmetic routines) 153

8.8  系统初始化 155

第9章  运行时支持函数 160

9.1  库 160

9.2  C的I/O函数 161

9.3  头文件 168

9.4  运行时支持函数和宏总结 177

9.5  运行时支持函数和宏的描述 184

第10章  建库工具和C++名还原工具 228

10.1  建库工具(library-build utility) 228

10.2  C++名还原工具(Name Demangler) 231

第2篇  TMS320C6000程序员手册

第11章  简介 235

11.1  TMS320C6000体系结构 235

11.2  TMS320C6000流水线 235

11.3  提高性能的代码开发流程 236

第12章  C/C++代码优化 240

12.1  编写C/C++代码 240

12.2  编译C/C++代码 241

12.3  代码剖析 245

12.4  优化C/C++代码 247

第13章  编译器优化指南 273

13.1  引言:简单的C代码调整 273

13.2  第1课:从存储器指针得到循环传递路径 275

13.3  第2课:利用双数据通道平衡资源 280

13.4  第3课:存储器带宽的打包数据优化 283

13.5  第4课:程序级优化 287

13.6  第5课:写线性汇编 288

第14章  反馈解决方案 293

14.1  理解反馈 293

14.2  循环的错误信息 297

14.3  流水失败信息 298

14.4  研究反馈信息 302

第15章  通过线性汇编优化汇编代码 304

15.1  线性汇编代码 304

15.2  汇编优化器选项和伪指令 305

15.3  写并行代码 308

15.4  对短字长的数据使用字访问,对于浮点数据采用双字访问 314

15.5  软件流水 320

15.6  多周期循环的模迭代 339

15.7  循环传递路径 350

15.8  循环中的If-Then-Else语句 356

15.9  循环展开 360

15.10  生命太长问题(Live-Too-Long) 364

15.11  消除冗余取数 369

15.12  存储体 374

15.13  软件流水外环 383

15.14  同内环一起条件地执行外环 386

第16章  C64系列编程注意事项 396

16.1  C64x增强型结构简介 396

16.2  在C64x中使用打包数据处理 397

16.3  线性汇编的考虑 422

第17章  汇编代码结构 429

17.1  标号 429

17.2  并行符号 429

17.3  条件 429

17.4  指令 430

17.5  功能单元 431

17.6  操作数 433

17.7  注释 433

第18章  中断 434

18.1  中断概述 434

18.2  单分配和多分配 434

18.3  中断循环 435

18.4  可中断的代码产生 435

18.5  中断子程序 438

第19章  连接问题 441

19.1  怎样使用连接错误信息 441

19.2  如何通过放RTS在片外来节省片内存储器 443

第3篇  TMS320C6000汇编语言工具用户手册

第20章  软件开发工具简介 449

20.1  软件开发工具概述 449

20.2  工具介绍 449

20.3  Code Composer Studio和代码产生工具 451

第21章  通用目标文件格式(COFF)简介 452

21.1  段(sections) 452

21.2  汇编器怎样处理段 453

21.3  连接器怎样处理段 457

21.4  重定位 459

21.5  运行时重定位 460

21.6  程序加载 460

21.7  在COFF文件里的符号 460

第22章  汇编器描述 462

22.1  汇编器概述 462

22.2  汇编器在软件开发流程中的作用 462

22.3  调用汇编器 462

22.4  指定备用的汇编器输入 464

22.5  源语句格式 466

22.6  常量 469

22.7  字符串 471

22.8  符号 471

22.9  表达式 477

22.10  源文件列表 480

22.11  调试汇编源程序 481

22.12  交叉引用列表 482

第23章  汇编器伪指令 484

23.1  伪指令综述 484

23.2  段定义伪指令 487

23.3  初始化常量的伪指令 489

23.4  使段程序计数器对齐的伪指令 491

23.5  指定输出列表格式的伪指令 491

23.6  引用其他文件的伪指令 492

23.7  激活条件汇编的伪指令 493

23.8  定义汇编时刻的符号的伪指令 493

23.9  其他伪指令 494

23.10  伪指令参考 495

第24章  宏语言 534

24.1  宏的使用 534

24.2  定义宏 534

24.3  宏参数/替代符号 535

24.4  宏库 540

24.5  在宏内使用条件汇编 541

24.6  在宏内使用标号 542

24.7  在宏内生成信息 543

24.8  使用伪指令指定输出列表的格式 544

24.9  使用递归和嵌套的宏 545

24.10  宏伪指令综述 546

第25章  文档管理器说明 548

25.1  文档管理器概述 548

25.2  在软件开发流程中文档管理器的作用 548

25.3  调用文档管理器 548

25.4  文档管理器举例 550

第26章  连接器描述 552

26.1  连接器概述 552

26.2  连接器在软件开发流程中的作用 552

26.3  调用连接器 552

26.4  连接器选项 554

26.5  连接器命令文件 565

26.6  目标库 567

26.7  MEMORY伪指令 568

26.8  SECTIONS伪指令 570

26.9  指定段的运行地址 578

26.10  使用GROUP和UNION语句 580

26.11  特殊的段类型(DSECT、COPY和NOLOAD) 584

26.12  默认的定位算法 584

26.13  连接时给符号赋值 586

26.14  创建与填充空穴 591

26.15  连接器产生的复制表 594

26.16  部分(增量)连接 602

26.17  连接C/C++代码 603

26.18  连接器实例 606

第27章  绝对地址列表工具说明 609

27.1  产生一个绝对地址列表 609

27.2  调用绝对地址列表工具 609

27.3  绝对地址列表工具举例 610

第28章  交叉引用列表工具说明 614

28.1  生成交叉引用列表 614

28.2  调用交叉引用列表工具 614

28.3  交叉引用列表举例 615

第29章  目标文件工具说明 617

29.1  调用目标文件显示工具 617

29.2  XML标志索引 617

29.3  XML用户例子 621

29.4  调用名称列表工具程序 627

29.5  调用剥离工具程序 627

第30章  十六进制转换工具说明 629

30.1  十六进制转换工具在软件开发流程中的作用 629

30.2  调用十六进制转换工具 629

30.3  理解存储器宽度 632

30.4  ROMS伪指令 636

30.5  SECTIONS伪指令 639

30.6  排除一个指定段 640

30.7  给输出文件赋名 641

30.8  图像模式和-fill选项 642

30.9  为片上导引加载器构建一张表 643

30.10  控制ROM器件地址 646

30.11  目标格式描述 647

30.12  十六进制转换工具程序的错误提示信息 650

附录A  通用目标文件格式 652

附录B  符号调试伪指令 662

附录C  XML连接信息文件说明 664

附录D  术语表 671

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个