第1章 C55x编程基本指南 1
1.1 引言 1
1.1.1 TMS320C55x结构 1
1.1.2 获得最佳性能的代码开发流程 1
1.2 基本教程 3
1.2.1 引言 3
1.2.2 编写汇编代码 4
1.2.3 理解链接过程 8
1.2.4 建立程序 10
1.2.5 测试代码 13
1.2.6 代码计时 14
1.3 定点算术运算 14
1.3.1 定点运算指南 14
1.3.2 扩展精度的加法和乘法 19
1.3.3 扩展精度的乘法 22
1.3.4 除法 24
1.3.5 处理溢出的方法 29
1.4 TI C55x DSPLIB 31
1.4.1 特征和便利之处 31
1.4.2 DSPLIB数据类型 31
1.4.3 DSPLIB的参数 32
1.4.4 在C中调用DSPLIB函数 32
1.4.5 在汇编语言源代码中调用DSPLIB函数 33
1.4.6 在哪里查看示例程序 33
1.4.7 DSPLIB函数 33
第2章 C55x汇编语言指令系统 34
2.1 术语、符号与缩写 34
2.1.1 指令集术语、符号和缩写 34
2.1.2 指令集条件字段 36
2.1.3 状态位的影响 38
2.1.4 指令集注释和规则 41
2.1.5 不可重复指令 46
2.2 并行特征和规则 47
2.2.1 并行特征 47
2.2.2 并行基础 48
2.2.3 资源冲突 49
2.2.4 软双重并行 50
2.2.5 条件执行指令 51
2.2.6 其他例外 51
2.3 寻址方式 51
2.3.1 寻址方式概述 51
2.3.2 绝对寻址方式 52
2.3.3 直接寻址方式 53
2.3.4 间接寻址方式 54
2.3.5 循环寻址 64
2.4 指令集说明 65
第3章 C55x汇编语言开发工具 194
3.1 引言 194
3.1.1 软件开发工具描述 194
3.1.2 工具简介 194
3.2 公用目标文件格式(COFF)简介 196
3.2.1 段 196
3.2.2 汇编器如何处理段 197
3.2.3 链接器如何处理段 202
3.2.4 重定位 203
3.2.5 运行时间重定位 204
3.2.6 装载程序 205
3.2.7 COFF文件中的符号 205
3.3 汇编器描述 206
3.3.1 汇编器概述 206
3.3.2 汇编器的开发流程 207
3.3.3 调用汇编器 207
3.3.4 C55x汇编器的特点 211
3.3.5 为汇编器输入的预备文件和目录命名 216
3.3.6 源语句格式 218
3.3.7 常数 220
3.3.8 字符串 222
3.3.9 符号 223
3.3.10 表达式 228
3.3.11 内建函数 229
3.3.12 源程序列表 230
3.3.13 交叉引用列表 233
3.4 汇编伪指令 234
3.4.1 伪指令概述 235
3.4.2 定义段的伪指令 238
3.4.3 初始化常数的伪指令 240
3.4.4 对齐SPC的伪指令 243
3.4.5 格式化输出列表的伪指令 244
3.4.6 引用其他文件的伪指令 245
3.4.7 条件汇编伪指令 245
3.4.8 汇编时间符号伪指令 246
3.4.9 其他伪指令 247
3.5 宏语言 249
3.5.1 使用宏 249
3.5.2 宏定义 250
3.5.3 宏参数/替代符 252
3.5.4 宏库 257
3.5.5 在宏中使用条件汇编 257
3.5.6 在宏中使用标号 259
3.5.7 在宏中产生消息 260
3.5.8 格式化输出列表 261
3.5.9 使用递归和嵌套宏 262
3.5.10 宏伪指令总结 264
3.6 链接器 265
3.6.1 链接器概述 265
3.6.2 链接器开发流程 265
3.6.3 调用链接器 266
3.6.4 链接选项 267
3.6.5 字节/字寻址 277
3.6.6 链接命令文件 277
3.6.7 目标库 279
3.6.8 MEMORY伪指令 280
3.6.9 SECTIONS伪指令 283
3.6.10 指定段的装载时间(load-time)和运行时间(run-time)地址 292
3.6.11 使用UNION和GROUP语句 298
3.6.12 重叠页 302
3.6.13 默认分配算法 305
3.6.14 特殊段类型(DSECT、COPY和NOLOAD) 307
3.6.15 链接时为符号赋值 307
3.6.16 创建和填充空穴 310
3.6.17 部分(追加)链接 313
3.6.18 C/C++代码的链接 314
3.6.19 链接举例 316
3.7 归档器描述 319
3.7.1 归档器概述 319
3.7.2 归档器开发流程 320
3.7.3 调用归档器 321
3.7.4 归档器的例子 321
3.8 绝对列表器描述 322
3.8.1 产生绝对列表 322
3.8.2 调用绝对列表器 323
3.8.3 绝对列表举例 324
3.9 交叉引用列表器 328
3.9.1 产生一个交叉引用列表 328
3.9.2 调用交叉引用列表器 328
3.9.3 交叉引用列表举例 329
3.10 反汇编器描述 330
3.10.1 调用反汇编器 331
3.10.2 反汇编举例 331
3.11 命名工具描述 333
3.12 十六进制转换工具 334
3.12.1 十六进制转换工具开发流程 335
3.12.2 调用十六进制转换工具 336
3.12.3 命令文件 337
3.12.4 理解存储器宽度 339
3.12.5 ROMS伪指令 343
3.12.6 SECTIONS伪指令 347
3.12.7 输出文件名 349
3.12.8 映像模式和-fill选项 350
3.12.9 为片内引导装载器建表 351
3.12.10 控制ROM器件地址 355
3.12.11 目标格式的描述 357
3.12.12 十六进制转换工具错误消息 361
第4章 C55x C/C++语言与编译工具 363
4.1 引言 363
4.1.1 软件开发工具概述 363
4.1.2 C/C++编译器概述 365
4.1.3 编译器和CCS 366
4.2 使用C/C++编译器 366
4.2.1 关于编译器 367
4.2.2 调用C/C++编译器 368
4.2.3 通过选项改变编译器的行为 368
4.2.4 使用环境变量 380
4.2.5 控制预处理器 381
4.2.6 理解诊断信息 383
4.2.7 生成交叉引用列表信息(-px选项) 386
4.2.8 生成一个原始列表文件(-pl选项) 387
4.2.9 使用内嵌函数扩展 388
4.2.10 使用内部列表 391
4.3 优化用户的代码 393
4.3.1 使用优化器 393
4.3.2 执行文件级优化(-O3选项) 394
4.3.3 执行程序级优化(-pm和-O3选项) 395
4.3.4 小心使用优化后的代码中的asm语句 397
4.3.5 在优化后的代码中访问混叠变量 397
4.3.6 自动内嵌扩展(-oi选项) 398
4.3.7 通过优化器使用内部列表 398
4.3.8 调试优化后的代码 399
4.3.9 将执行何种优化 400
4.4 链接C/C++代码 405
4.4.1 调用链接器(-z选项) 405
4.4.2 禁止链接器(-c选项) 406
4.4.3 链接选项 407
4.4.4 控制链接处理 408
4.5 TMS320C55x C/C++语言 412
4.5.1 TMS320C55x C的特性 412
4.5.2 TMS320C55x C++的特征 413
4.5.3 数据类型 414
4.5.4 关键字 415
4.5.5 寄存器变量和参数 419
4.5.6 asm语句 420
4.5.7 pragma伪指令 421
4.5.8 产生链接名 430
4.5.9 初始化静态和全局变量 431
4.5.10 改变ISO C语言模式(-pk、-pr或-ps选项) 432
4.5.11 编译器限制 434
4.6 运行时间环境 434
4.6.1 存储器 434
4.6.2 字符串常量 439
4.6.3 寄存器规约 439
4.6.4 函数结构和调用规约 442
4.6.5 连接C/C++语言和汇编语言 445
4.6.6 中断处理 457
4.6.7 在P2保留模式下的数据扩展寻址 458
4.6.8 扩展存储器中的.const段 460
4.6.9 系统初始化 462
4.7 运行时间支持函数 466
4.7.1 库 466
4.7.2 C的I/O函数 467
4.7.3 头文件 474
4.7.4 运行时间支持函数和宏的总结 480
4.7.5 运行时间支持函数和宏的描述 487
4.8 建库工具 526
4.8.1 调用建库工具 526
4.8.2 建库工具选项 527
4.8.3 选项总结 527
4.9 C++名称恢复器 529
4.9.1 调用C++名称恢复器 529
4.9.2 C++名称恢复器选项 530
4.9.3 C++名称恢复器使用举例 530
第5章 C代码及汇编代码优化 532
5.1 C代码优化 532
5.1.1 编写C55x DSP的C/C++代码介绍 532
5.1.2 编译C/C++代码 535
5.1.3 剖析代码 539
5.1.4 精炼C/C++代码 539
5.1.5 内存管理问题 556
5.2 汇编代码优化 560
5.2.1 有效使用双MAC硬件 560
5.2.2 使用并行执行特性 568
5.2.3 实现高效循环 584
5.2.4 最小化流水线和IBQ延迟 588