ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
.cinit 段中的表由可变大小的初始化记录组成。每个必须自动初始化的变量在 .cinit 段中都有一条记录。图 6-9 显示了 .cinit 段的格式和初始化记录。
初始化记录的字段包含以下信息:
每个必须自动初始化的变量在 .cinit 段中都有一条初始化记录。
以下示例显示了在 C 中定义的初始化全局变量。
int i = 23;
int a[5] = { 1, 2, 3, 4, 5 };
相应的初始化表如下所示。.cinit:c 段包含所有标量数据,是 .cinit 段的子段。该子段在初始化期间作为一条记录处理,从而最大限度地减少了 .cinit 段的整体大小。
.sect ".cinit" ; Initialization section
* Initialization record for variable i
.align 4 ; align on word boundary
.field 4,32 ; length of data (1 word)
.field _i+0,32 ; address of i
.field 23,32 ; _i @ 0
* Initialization record for variable a
.sect ".cinit"
.align 4 ; align on word boundary
.field IR1,32 ; Length of data (5 words)
.field _a+0,32 ; Address of a[ ]
.field 1,32 ; _a[0] @ 0
.field 2,32 ; _a[1] @ 32
.field 3,32 ; _a[2] @ 64
.field 4,32 ; _a[3] @ 96
.field 5,32 ; _a[4] @ 128
IR1: .set 20 ; set length symbol
.cinit 段必须只包含这种格式的初始化表。连接汇编语言模块时,请勿将 .cinit 段用于任何其他目的。
.pinit 段中的表仅包含要调用的构造函数的地址列表(如下图所示)。构造函数显示在表中的 .cinit 初始化后。
当您使用 --rom_model 或 --ram_model 选项时,链接器会组合来自所有 C/C++ 模块的 .cinit 段,并在 .cinit 复合段的末尾附加一个空字。此终止记录显示为字段大小为 0 的记录,并标记初始化表的末尾。
同样,--rom_model 或 --ram_model 链接选项会使链接器组合来自所有 C/C++ 模块的所有 .pinit 段,并在 .pinit 复合段的末尾附加一个空字。启动例程在遇到空构造函数地址时知道全局构造函数表的末尾。
符合 const 条件的变量的初始化方式有所不同;请参阅节 5.7.1。