ZHCU876Z July 2001 – October 2023 SM320F28335-EP
编译器生成可重定位的代码块和数据块。这些块,称为段,以各种方式分配在内存中,以符合各种系统配置。有关编译器如何使用这些段的完整说明,请参阅节 7.1.1。
编译器创建两种基本类型的段:初始化段和未初始化段。表 4-1 总结了初始化段。表 4-2 总结了未初始化段。
名称 | 内容 | 限制 |
---|---|---|
.args | 在引导程序调用 main() 函数之前保留用于复制命令行参数的空间。请参阅节 2.6。 | |
.binit | 引导时间复制表(有关链接器命令文件中 BINIT的信息,请参阅汇编语言工具用户指南) | |
.c28xabi.exidx | 用于异常处理的索引表;只读。(仅限 EABI) | 程序 |
.c28xabi.extab | 用于异常处理的展开指令;只读。(仅限 EABI) | 程序 |
.cinit | 用于显式初始化全局和静态变量的表。(1) | 程序 |
.const | 显式初始化且包含字符串文字的全局和静态常量变量。字符串文字放置在 .const:.string 子段中,以更大力度地控制链接时放置位置。(仅限 EABI) | 数据 |
.data | 显式初始化的全局和静态非常量变量。(1) | 数据 |
.econst | 显式初始化或包含字符串文字的全局常量变量。字符串文字放置在 .econst:.string 子段中,以更大力度地控制链接时放置位置。(仅限 COFF) | 数据 |
.init_array | 启动时要调用的构造函数表。(仅限 EABI) | 程序 |
.ovly | 复制除引导时间 (.binit) 复制表以外的表。 | |
.pinit | 启动时要调用的构造函数表。(仅限 COFF) | 程序 |
.ppdata | 用于基于编译器的分析的数据表(请参阅 --gen_profile_info 选项)。 | 数据 |
.ppinfo | 用于基于编译器的分析的相关性表(请参阅 --gen_profile_info 选项)。 | 数据 |
.switch | 大型切换语句的跳转表。 | 不带 -unified_memory 选项的程序 任何位置都带有 -unified_memory 选项 |
.text | 可执行代码和常量。 | 程序 |
名称 | 内容 | 限制 |
---|---|---|
.bss | 全局和静态变量(仅限 EABI) | 数据中的任何位置 |
.ebss | 全局和静态变量(仅限 COFF) | 数据中的任何位置 |
.stack | 栈 | 低 64K |
.sysmem | malloc 函数的内存(堆)(仅限 EABI) | 数据中的任何位置 |
.esysmem | malloc 函数的内存(堆)(仅限 COFF) | 数据中的任何位置 |
链接程序时,必须指定内存中分配这些段的位置。通常,初始化段链接到 ROM 或 RAM 中,而未初始化段链接到 RAM 中。
链接器提供了 MEMORY 和 SECTIONS 指令用于分配段。有关将段分配到存储器中的更多信息,请参阅 TMS320C28x 汇编语言工具用户指南。