ZHCU876Z July 2001 – October 2023 SM320F28335-EP
本节仅适用于使用 COFF ABI 的应用。
在 C/C++ 程序开始运行之前,必须为某些全局变量分配初始值。检索这些变量的数据并使用数据初始化变量的过程被称为自动初始化。
编译器在名为 .cinit 的特殊段中构建表,其中包含用于初始化全局变量和静态变量的数据。每个编译的模块都包含这些初始化表。链接器将它们合并到一个表中(一个 .cinit 段)。引导例程或加载程序使用此表初始化所有系统变量。
在 ANSI/ISO C 中,未显式初始化的全局变量和静态变量必须在程序执行之前设置为 0。C/C++ 编译器不会对未初始化的变量执行任何预初始化。对初始值必须为 0 的任何变量进行显式初始化。
更简单的方法是让加载程序在程序开始运行之前清除 .ebss 或 .bss 段。另一种方法是在 .ebss 或 .bss 段的链接器控件映射中将填充值设置为零。
烧录到 ROM 中的代码无法使用这些方法。
全局变量在运行时或加载时自动初始化;请参阅节 7.10.3.2 和节 7.10.3.3。也请参见 节 6.13。