第1章 软件开发工具 1
目录 1
1.1 软件开发工具概况 2
1.2 软件开发工具介绍 2
第2章 通用目标文件格式介绍 4
2.1 段 4
2.2 汇编器如何处理段 5
2.2.1 未初始化段 6
2.2.2 已初始化段 6
2.2.3 已命名段 7
2.2.5 段程序计数器 8
2.2.6 使用段伪指令实例 8
2.2.4 子段 8
2.3 链接器如何处理段 10
2.3.1 默认内存分配 11
2.3.2 在存储器映像中存放段 12
2.4 重定位 12
运行中的重定位 13
2.5 装载程序 14
2.6 COFF文件中的符号 14
2.6.1 外部符号 14
2.6.2 符号表 15
第3章 汇编器 16
3.1 汇编器功能 16
3.2 在软件开发过程中汇编器的作用 17
3.3 运行汇编器 17
3.4 为汇编器输入的替换目录命名 19
3.4.1 使用-i汇编器选项 20
3.4.2 使用C2000_A_DIR或A_DIR环境变量 20
3.5 源程序语句格式 20
3.5.1 标号域 21
3.5.2 助记符域 22
3.5.3 操作数域 22
3.5.4 注释域 22
3.6 常量 22
3.6.1 二进制整数 23
3.6.2 八进制整数 23
3.6.3 十进制整数 23
3.6.6 汇编编译过程使用的(Assembly-Time)常量 24
3.6.5 字符常量 24
3.6.4 十六进制整数 24
3.6.7 浮点型常量 25
3.7 字符串 25
3.8 符号 25
3.8.1 标号 26
3.8.2 局部标号 26
3.8.3 符号常量 28
3.8.4 定义符号常量(-d选项) 28
3.8.5 预定义符号常量 29
3.8.6 置换符号 30
3.9 表达式 31
3.9.1 运算符 31
3.9.4 条件表达式 32
3.9.2 表达式的上溢和下溢 32
3.9.3 定义明确的表达式 32
3.9.5 合法的表达式 33
3.10 内嵌函数 34
3.11 源程序列表 35
3.12 交叉引用列表 36
3.13 灵巧的编码 37
3.14 汇编变量的C类型符号调试 38
3.15 TMS320C28x汇编器的模式 40
3.15.1 C27x目标模式 40
3.15.2 C28x目标模式 41
3.15.3 C28x目标——兼容C27x的语法模式 41
3.15.4 C28x目标——兼容C2xlp的语法模式 41
4.1 伪指令简介 44
第4章 汇编伪指令 44
4.2 与TMS320C1x/C2x/C2xx/C5x汇编伪指令的兼容性 47
4.3 定义段的伪指令 48
4.4 常数初始化伪指令 50
4.5 调准段程序计数器伪指令 52
4.6 输出列表格式伪指令 53
4.7 引用其他文件的伪指令 54
4.8 条件汇编伪指令 54
4.9 汇编过程使用的符号的伪指令 55
4.10 汇编器模式伪指令 56
4.11 其他伪指令 56
4.12 伪指令索引表 57
5.1 宏的使用 99
第5章 宏语言 99
5.2 定义宏 100
5.3 宏参数/置换符号 101
5.3.1 定义置换符号的伪指令 102
5.3.2 内置置换符号函数 103
5.3.3 递归的置换符号 104
5.3.4 强制置换 104
5.3.5 访问下标置换符号的单个字符 105
5.3.6 在宏中作为局部变量的置换符号 106
5.4 宏库 107
5.5 在宏中使用条件汇编 107
5.6 在宏中使用标号 109
5.7 在宏中产生信息 110
5.9 递归和嵌套宏的使用 111
5.8 用伪指令格式化输出列表 111
5.10 宏伪指令汇总 113
第6章 归档器 115
6.1 归档器概述 115
6.2 软件开发流程中归档器的作用 116
6.3 调用归档器 116
6.4 归档器实例 117
第7章 链接器 120
7.1 链接器概述 120
7.2 在软件开发流程中链接器的作用 121
7.3 调用链接器 121
7.4 链接器选项 123
7.4.1 重定位(-a和-r选项) 124
7.4.3 C语言程序选项(-c和-cr选项) 125
7.4.4 定义入口(-e选项) 125
7.4.2 禁止合并符号调试信息 125
7.4.5 设置默认的填充值(-ffill_value选项) 126
7.4.6 全局化符号(-g symbol选项) 126
7.4.7 静态化所有的全局符号(-h选项) 126
7.4.8 定义堆的大小(-heap size选项) 126
7.4.9 改变库的搜索路径(-l选项、-i选项和C_DIR环境变量) 127
7.4.10 取消条件链接 128
7.4.11 忽略分配(-k选项) 129
7.4.12 创建映像文件(-m filename选项) 129
7.4.15 删除符号信息(-s选项) 130
7.4.16 定义堆栈的大小(-stack size选项) 130
7.4.14 隐藏运行信息(-q选项) 130
7.4.13 命名输出文件(-o filename选项) 130
7.4.17 引入未定义的符号(-u symbol选项) 131
7.4.18 当创建未定义的段时显示信息(-w选项) 131
7.4.19 穷举读库(-x选项) 131
7.5 链接器命令文件 132
7.5.1 链接器命令文件中的保留名 133
7.5.2 链接器命令文件中的常量 134
7.6 目标库 134
7.7 MEMORY伪指令 135
7.7.1 默认的存储器模式 135
7.7.2 MEMORY伪指令格式 135
7.8.1 SECTIONS伪指令的格式 138
7.8 SECTIONS伪指令 138
7.8.2 地址分配 140
7.8.3 规定输入段 143
7.9 指定一个段的运行地址 145
7.9.1 指定装载和运行地址 145
7.9.2 未初始化的段 146
7.9.3 用.label伪指令访问装载地址 146
7.10 UNION和GROUP语句的使用 147
7.10.1 用UNION语句重叠段 147
7.10.2 把输出段在一起分组 149
7.11 重叠页 149
7.11.2 重叠页实例 150
7.11.3 在SECTIONS伪指令中使用重叠页 150
7.11.1 用MEMORY伪指令定义重叠页 150
7.11.4 对重叠页的存储器分配 151
7.12 特殊段类型 152
7.13 默认分配 152
7.13.1 输出段的形成 153
7.13.2 默认分配算法 153
7.14 链接时给符号赋值 154
7.14.1 赋值语句的格式 154
7.14.2 将SPC赋值到一个符号 154
7.14.3 赋值表达式 155
7.14.4 链接器定义的符号 156
7.15 创建和填充空位 156
7.15.1 初始化段和未初始化段 156
7.15.2 创建空位 157
7.15.3 填充空位 158
7.15.4 未初始化段的显式初始化 159
7.16 部分(增量)链接 159
7.17 链接C代码 161
7.17.1 运行中的初始化 161
7.17.2 目标库和运行时的支持 161
7.17.3 设置堆栈和堆段的大小 162
7.17.4 运行中变量的自动初始化 162
7.17.5 装载时变量的自动初始化 162
7.17.6 -c和-cr链接器选项 163
7.18 链接器举例 163
第8章 绝对列表程序 167
8.1 生成绝对列表 167
8.2 调用绝对列表程序 168
8.3 绝对列表程序实例 169
第9章 交叉引用列表程序 173
9.1 生成交叉引用列表 173
9.2 调用交叉引用列表程序 174
9.3 交叉引用列表程序举例 175
第10章 十六进制转换应用程序 177
10.1 十六进制转换应用程序在软件开发流程中的作用 178
10.2 调用十六进制转换应用程序 178
10.2.1 从命令行调用十六进制转换应用程序 179
10.2.2 用命令文件调用十六进制转换应用程序 180
10.3 存储器宽度 181
10.3.1 目标宽度 181
10.3.2 存储器宽度 181
10.3.3 数据划分到输出文件 182
10.3.4 规定输出字的字次序 184
10.4 ROMS 伪指令 184
10.4.1 何时使用ROMS伪指令 186
10.4.2 ROMS伪指令举例 186
10.5 SECTIONS伪指令 188
10.6 分配输出文件名 189
10.7 映像模式和填充(-fill)选项 190
10.7.1 生成一个存储器映像 190
10.7.2 填充值 191
10.7.3 在映像模式下所遵循的步骤 191
10.8 控制ROM器件地址 191
10.9.1 ASCII-Hex目标格式(-a选项) 192
10.9 目标格式 192
10.9.2 Intel MCS-86目标格式(-i选项) 193
10.9.3 Motorola-S目标格式(-m选项) 194
10.9.4 TI-Tagged SDSMAC目标格式(-t选项) 194
10.9.5 扩展Tektronix目标格式(-x选项) 195
10.10 十六进制转换应用程序错误信息 196
第11章 C28x汇编语言指令集 197
11.1 指令概述(按功能分类) 197
11.2 寄存器操作 199
附录A 通用目标文件格式 428
附录B 符号调试伪指令 444
附录C 汇编器错误信息 453
附录D 链接器错误信息 465
附录E 术语表 477