《TMS320C54x系列DSP指令和编程指南》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:杨占昕,邓纶晖,余心乐著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2010
  • ISBN:9787302216223
  • 页数:488 页
图书介绍:本书以美国TI公司的TMS320 C54系列DSP为描述对象。主要由TI公司的3个文献编译而成。本书详细介绍了TI公司的TMS320 C54系列DSP芯片的软件开发过程、汇编语言指令集、汇编语言工具和C语言编译器的使用以及代码优化方法等。

第1部分 汇编语言工具 3

第1章 汇编语言工具概述 3

1.1软件开发工具概述 3

1.2软件开发工具介绍 4

第2章 通用目标文件格式介绍 5

2.1 COFF文件类型 5

2.2段 5

2.3汇编器对段的处理 6

2.3.1未初始化段 6

2.3.2已初始化段 7

2.3.3已命名段 8

2.3.4子段 8

2.3.5段程序计数器 9

2.3.6使用段伪指令的实例 9

2.4连接器如何处理段 11

2.4.1默认的存储器分配 11

2.4.2将段放在存储器映像中 12

2.5重新定位 12

2.6运行时重新定位 14

2.7加载一个程序 14

2.8 COFF文件中的符号 15

2.8.1外部符号 15

2.8.2符号表 15

第3章 汇编器 16

3.1汇编器概述 16

3.2调用汇编器 16

3.3 C54x汇编器的特点 20

3.3.1字节/字寻址 20

3.3.2并行指令规则 22

3.3.3变长指令长度的确定 22

3.3.4存储器模式 23

3.3.5使用MMR地址时的汇编器警告 24

3.4为汇编器的输入命名备用的文件和路径 25

3.4.1使用-i汇编器选项 25

3.4.2使用环境变量(C54X_A_DIR和A_DIR) 26

3.5源程序语句的格式 27

3.5.1源程序语句的语法 27

3.5.2标号字段 27

3.5.3助记符指令字段 28

3.5.4代数指令字段 29

3.5.5注释字段 29

3.6常数 30

3.6.1二进制整数 30

3.6.2八进制整数 30

3.6.3十进制整数 31

3.6.4十六进制整数 31

3.6.5字符常数 31

3.6.6汇编时常数 31

3.6.7浮点常数 32

3.7字符串 32

3.8符号 33

3.8.1标号 33

3.8.2符号常数 33

3.8.3用-d选项定义符号常数 33

3.8.4预定义的符号常数 34

3.8.5替代符号 34

3.8.6局部标号 35

3.9表达式 37

3.9.1运算符 37

3.9.2表达式的上溢和下溢 38

3.9.3完整定义的表达式 38

3.9.4条件表达式 39

3.9.5可重新定位符号和合法的表达式 39

3.10内置函数 40

3.11源列表 41

3.12交叉引用列表 44

第4章 汇编伪指令 46

4.1伪指令概述 46

4.2与TMS320C1x/C2 x/ C2xx/C5x汇编器伪指令的兼容性 50

4.3用于段定义的伪指令 51

4.4用于初始化常量的伪指令 53

4.5调整段计数器的伪指令 55

4.6用于规范输出列表的伪指令 57

4.7用于调用其他文件的伪指令 58

4.8条件汇编伪指令 58

4.9汇编时符号伪指令 59

4.10其他伪指令 60

4.11伪指令参考信息 62

第5章 宏语言 107

5.1宏的使用 107

5.2定义宏 108

5.3宏参数/替代符号 109

5.3.1定义替代符号的伪指令 110

5.3.2内置的替代符号函数 111

5.3.3递归替代符号 112

5.3.4强制替代 112

5.3.5访问带下标的替代符号中的独立字符 113

5.3.6替代符号作为宏内的局部变量 114

5.4宏库 114

5.5在宏中使用条件汇编 115

5.6在宏中使用标号 116

5.7在宏中产生信息 118

5.8输出列表的格式化 119

5.9使用递归和嵌套的宏 120

5.10宏伪指令总结 121

第6章 连接器描述 123

6.1连接器概述 123

6.2如何调用连接器 123

6.3连接器选项 125

6.3.1重新定位能力(-a和-r选项) 126

6.3.2禁止符号调试信息的合并(-b选项) 127

6.3.3 C语言选项(-c和-cr选项) 127

6.3.4定义程序入口(-e global_symbol选项) 127

6.3.5设置默认的填充值(-fcc选项) 128

6.3.6将符号指定为全局符号(-g global_symbol选项) 128

6.3.7指定所有全局符号为静态(-h选项) 128

6.3.8定义堆的大小(-heap constant选项) 128

6.3.9改变库搜索算法(-l选项、-i选项和C54X_ C_DIR/C_ DIR环境变量) 129

6.3.10禁止条件连接(-j选项) 130

6.3.11忽略定位标志(-k选项) 130

6.3.12产生映像文件(-m filename选项) 130

6.3.13命名一个输出模块(-ofilename选项) 131

6.3.14指定静态运行(-q选项) 131

6.3.15删除符号信息(-s选项) 131

6.3.16定义堆栈大小(-stack constant选项) 131

6.3.17定义二级堆栈大小(-sysstack constant选项) 132

6.3.18引入一个未确定的符号(-u symbol选项) 132

6.3.19指定一个COFF格式(-v选项) 132

6.3.20显示输出段的信息(-w选项) 132

6.3.21穷举读库(-x和-priority选项) 133

6.4字节寻址/字寻址 134

6.5连接器命令文件 134

6.5.1连接器命令文件中的保留名 135

6.5.2命令文件中的常量 136

6.6目标库 136

6.7 MEMORY伪指令 137

6.7.1默认的存储器模型 137

6.7.2 MEMORY伪指令的语法 137

6.8 SECTIONS伪指令 139

6.8.1 SECTIONS伪指令的语法格式 140

6.8.2地址分配 141

6.8.3把存档库的一个成员分配到输出段 145

6.8.4使用多个存储器区域进行地址分配 146

6.8.5输出段在非连续存储器区域间的自动分割 146

6.9指定一个段的加载地址和运行地址 148

6.9.1指定加载地址和运行地址 148

6.9.2未初始化段 149

6.9.3使用.label伪指令引用加载地址 149

6.10使用UNION(联合段)和GROUP(成组段)语句 151

6.10.1用UNION语句使段重叠 151

6.10.2将输出段组合成组 152

6.10.3嵌套的联合段(UNION)和成组段(GROUP) 153

6.10.4检查地址分配的一致性 153

6.11重叠页 154

6.11.1使用MEMORY伪指令定义重叠页 155

6.11.2用SECTIONS伪指令定义重叠页 156

6.11.3页定义的语法格式 157

6.12默认的地址分配算法 157

6.12.1地址分配算法 158

6.12.2输出段的通常规则 158

6.13特殊的段类型(DSECT、COPY和NOLOAD) 159

6.14连接时给符号赋值 160

6.14.1赋值语句的语法 160

6.14.2将段程序计数器SPC值赋给一个符号 160

6.14.3赋值表达式 161

6.14.4连接器定义的符号 162

6.14.5只有C语言支持的符号定义(-c或-cr选项) 162

6.15产生和填充存储器空位 162

6.15.1已初始化段和未初始化段 163

6.15.2创建空位 163

6.15.3填充空位 164

6.15.4对未初始化段的显式初始化 165

6.16部分连接 166

6.17连接C/C++代码 167

6.17.1运行时的初始化 167

6.17.2目标库以及运行时的支持 167

6.17.3设置堆栈和堆的大小 168

6.17.4自动初始化(ROM和RAM模式) 168

6.17.5连接器选项-c和-cr 169

6.18连接器举例 169

第7章 文档管理器 173

7.1文档管理器概述 173

7.2调用文档管理器 173

7.3文档管理器举例 174

第8章 绝对地址列表器描述 176

8.1产生绝对地址列表 176

8.2调用绝对地址列表器 177

8.3绝对地址列表器用例 178

第9章 交叉引用列表器描述 182

9.1交叉引用列表的产生 182

9.2调用交叉引用列表器 183

9.3交叉引用列表举例 183

第10章 十六进制转换工具 185

10.1调用十六进制转换工具 185

10.2命令文件 187

10.2.1命令文件例子 187

10.3存储器宽度 188

10.3.1目标宽度 189

10.3.2数据宽度 189

10.3.3存储器宽度 189

10.3.4 ROM宽度 190

10.3.5一个存储器配置实例 191

10.3.6指定输出字的顺序 191

10.4 ROMS伪指令 192

10.4.1何时使用ROMS伪指令 193

10.4.2 ROMS伪指令的一个例子 194

10.4.3创建ROMS伪指令 195

10.5 SECTIONS伪指令 196

10.6输出文件名 197

10.6.1指定输出文件名 197

10.7映像模式和-fill选项 198

10.7.1 -image选项 198

10.7.2指定填充值 199

10.7.3映像模式的运行步骤 199

10.8为片内引导加载器创建一个引导表 199

10.8.1引导表说明 199

10.8.2引导表的格式 200

10.8.3怎样创建引导表 200

10.8.4从器件的外设引导 201

10.8.5设置引导表的入口 201

10.8.6使用C54x引导加载器 202

10.9控制ROM器件的地址 203

10.9.1控制起始地址 203

10.9.2控制地址递增索引 204

10.9.3 -byte选项 204

10.9.4处理地址空位 204

10.10目标格式的描述 205

10.10.1 ASCII-Hex目标格式(-a选项) 206

10.10.2 Intel MCS-86目标格式(-i选项) 206

10.10.3 Motorola-S目标格式(-m1、-m2、-m3选项) 207

10.10.4 TI-Tagged目标格式(-t选项) 208

10.10.5扩展的Tektronix目标格式(-x选项) 208

10.11十六进制转换工具的错误提示信息 209

第11章 助记符到代数语言的转换器描述 210

11.1转换器概述 210

11.1.1转换器做什么 210

11.1.2转换器不能做什么 210

11.2调用转换器 211

11.3转换器模式 211

11.3.1文字模式(-t选项) 211

11.3.2关于文字模式中的符号名 211

11.3.3扩展模式(-e选项) 212

11.4转换器对宏的处理 213

11.4.1宏中的伪指令 213

11.4.2宏的局部变量 214

11.4.3调用宏时定义的标号 214

第2部分C编译器 219

第12章C/C++编译器概述 219

12.1 C/C++编译器简介 219

12.1.1 ISO标准 219

12.1.2输出文件 219

12.1.3编译器接口 220

12.1.4编译器的操作 220

12.1.5辅助工具 220

12.2编译器与代码生成工具包(CCS) 220

第13章C/C++编译器的使用 222

13.1关于编译器 222

13.2 C/C++编译器的调用方法 223

13.3用选项控制编译器的操作 223

13.3.1常用选项 228

13.3.2指定文件名 230

13.3.3改变编译器对文件名的类型识别规则(-fa、-fc、-fg、-fo和-fp选项) 231

13.3.4改变编译器对文件名和扩展名的命名规则(-e选项) 231

13.3.5指定目录 232

13.3.6控制汇编器的选项 232

13.4使用环境变量 233

13.4.1指定路径(C_ DIR和C54X_ C_ DIR) 234

13.4.2设置默认的编译器选项(C_OPTION和C54X_C_OPTION) 234

13.5控制预处理器 235

13.5.1预定义的宏名 235

13.5.2 # include文件的搜索路径 235

13.5.3产生预处理列表文件(-PPo选项) 236

13.5.4预处理之后的继续编译(-ppa选项) 236

13.5.5产生带有注释的预处理列表文件(-ppc选项) 237

13.5.6产生带有行控制信息的预处理列表文件(-PPl选项) 237

13.5.7为代码生成工具产生预处理输出(-ppd选项) 237

13.5.8创建包含#include伪指令的文件列表(-ppi选项) 237

13.6理解诊断信息 237

13.6.1控制诊断信息 239

13.6.2怎样使用诊断屏蔽选项 240

13.6.3其他信息 240

13.7产生交叉引用列表信息(-px选项) 241

13.8创建一个原始的列表文件(-pl选项) 241

13.9使用内联函数展开 242

13.9.1 Intrinsic操作的内联 243

13.9.2非保护的定义控制内联 243

13.9.3保护的内联以及_INLINE预处理符号 244

13.9.4有关内联的限制 245

13.10使用交互列表 245

第14章 优化代码 247

14.1优化器的使用 247

14.2执行文件级优化(用-O3选项) 248

14.2.1控制文件级优化(-Ol选项) 248

14.2.2生成一个优化信息文件(-on选项) 249

14.3执行程序级优化(-pm和-O3选项) 249

14.3.1控制程序级的优化(-op选项) 249

14.3.2 C与汇编语言混合编程时的优化考虑 250

14.4关于在优化代码中使用asm语句的警告 251

14.5在已经优化的代码中访问别名变量 251

14.6自动内联展开(-oi选项) 252

14.7优化时使用交互列表工具 252

14.8调试优化后的代码 254

14.8.1调试优化后的代码(-g、-gw和-o选项) 254

14.8.2剖析已优化代码(-gp和-o选项) 254

14.9哪种优化正在执行 254

14.9.1基于开销的寄存器分配 255

14.9.2消除别名的歧义性 255

14.9.3跳转的优化和控制流的简化 255

14.9.4数据流的优化 256

14.9.5表达式的简化 257

14.9.6函数的内联展开 257

14.9.7索引变量和效用简化 258

14.9.8循环中固定代码的移出 259

14.9.9循环转换 259

14.9.10向后合并 259

14.9.11自增型寻址 260

14.9.12循环执行程序块 261

14.9.13延时的跳转、调用和返回 261

14.9.14代数重排、符号简化、常数合并 262

第15章C54x的C语言 263

15.1 TMS320C54x的C语言特点 263

15.1.1标识符和常数 263

15.1.2数据类型 263

15.1.3类型转换 264

15.1.4表达式 264

15.1.5声明 264

15.1.6预处理器 264

15.2 TMS320C54x的C++语言特点 265

15.3数据类型 265

15.4关键字 266

15.4.1 const关键字 266

15.4.2 ioport关键字 266

15.4.3 interrupt关键字 267

15.4.4 near和far关键字 268

15.4.5 volatile关键字 268

15.5寄存器变量 268

15.6全局寄存器变量 269

15.7 asm语句 270

15.8 Pragma伪指令 270

15.8.1 CODE_SECTION Pragma 271

15.8.2 DATA_SECTION Pragma 272

15.8.3 FUNC_CANNOT_INLINE Pragma 273

15.8.4 FUNC_EXT_CALLED Pragma 273

15.8.5 FUNC_IS_PURE Pragma 273

15.8.6 FUNC_IS_SYSTEM Pragma 274

15.8.7 FUNC_NEVER_RETURNS Pragma 274

15.8.8 FUNC_NO_GLOBAL_ASG Pragma 274

15.8.9 FUNC_NO_IND_ASG Pragma 275

15.8.10 IDENT Pragma 275

15.8.11 INTERRUPT Pragma 275

15.8.12 NO_INTERRUPT Pragma 276

15.9创建连接名 276

15.10初始化静态变量和全局变量 276

15.10.1用类型限定词const来初始化静态变量和全局变量 277

15.11改变ISO C语言模式(-pk、-pr和-ps选项) 277

15.11.1与K&R C的兼容(-pk选项) 278

15.11.2使能严格IS(O模式和非严格ISO模式(-ps和-pr选项) 279

15.11.3使能嵌入式C+++模式(-pe选项) 279

15.12编译器的限制 280

第16章 运行时环境 281

16.1存储器模式 281

16.1.1段 281

16.1.2 C/C++系统堆栈 282

16.1.3在程序存储器中给.const分配空间 283

16.1.4动态存储器分配 284

16.1.5变量的初始化 284

16.1.6给静态变量和全局变量分配存储器 284

16.1.7位域/结构体的定位 285

16.2字符串常量 285

16.3寄存器使用规则 286

16.3.1状态寄存器 286

16.3.2寄存器变量 287

16.4函数结构和调用规则 287

16.4.1函数如何产生调用 288

16.4.2被调用函数如何响应 288

16.4.3参数和局部变量的访问 289

16.4.4分配帧和使用32位存储器读指令 289

16.5 C/C++与汇编语言的接口 290

16.5.1在C/C++代码中使用汇编语言模块 290

16.5.2在C/C++程序中访问汇编语言变量 292

16.5.3使用内嵌的汇编语言 293

16.5.4使用内在函数(intrinsics)访问汇编语言语句 294

16.6中断管理 298

16.6.1关于中断的几个要点 298

16.6.2使用C/C++中断服务程序 299

16.6.3在中断入口处保存运行状态 299

16.7整数表达式分析 299

16.7.1运算的上溢和下溢 299

16.7.2带RTS调用的求值运算 300

16.7.3用C代码访问16位乘法的高16位 300

16.8浮点表达式分析 300

16.9系统初始化 301

16.9.1变量的自动初始化 301

16.9.2全局结构 302

16.9.3初始化表 302

16.9.4运行时的变量自动初始化 303

16.9.5加载时变量的自动初始化 303

第17章 运行时支持函数 305

17.1库 305

17.1.1 rts.src中的非标准头文件 305

17.1.2修改库函数 306

17.1.3用不同选项建库 306

17.2 C语言的I/O函数 306

17.2.1低级I/O操作概述 307

17.2.2为C语言I/O添加设备 308

17.3头文件 313

17.3.1诊断信息(assert.h/cassert) 314

17.3.2字符分类(character-typing)和转换(ctype.h/cctype) 314

17.3.3出错报告(errno.h/cerrno) 315

17.3.4扩展寻址函数(extaddr.h) 315

17.3.5低级I/O函数(file.h) 315

17.3.6取值范围的限制(float.h/cfloat和limits.h/climits) 315

17.3.7浮点数学(math.h/cmath) 317

17.3.8非局部跳转(setjmp.h/csetjmp) 317

17.3.9可变参数(stdarg.h/cstdarg) 317

17.3.10标准定义(stddef.h/cstddef) 318

17.3.11输入/输出函数(stdio.h/cstdio) 318

17.3.12通用工具(stdlib.h/cstdlib) 319

17.3.13字符串函数(string.h/cstring) 319

17.3.14时间函数(time.h/ctime) 319

17.3.15异常处理(exception和stdexcept) 320

17.3.16动态存储器管理(new) 320

17.3.17运行时类型信息(typeinfo) 320

17.4运行时支持函数和宏总结 321

17.5运行时支持函数和宏的描述 327

第18章 建库工具 365

18.1调用建库工具 365

18.2建库工具选项 365

18.3选项汇总 366

第19章C++的名称复原 368

19.1调用C++的名称复原工具 368

19.2 C++名称复原工具选项 368

19.3 C++名称复原工具的用例 369

第3部分 汇编语言指令集 373

第20章 汇编语言指令集概述 373

20.1指令集符号和缩略语 373

20.2指令说明的例子 376

第21章 指令集概述 379

21.1算术操作 379

21.2逻辑操作 383

21.3程序控制操作 385

21.4加载和存储操作 387

21.5循环执行一条指令 390

第22章 汇编语言指令 392