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 段的格式和初始化記錄。
圖 6-9 .cinit 段中初始化記錄的格式初始化記錄的字段包含以下信息:
每個必須自動初始化的變量在 .cinit 段中都有一條初始化記錄。
以下示例顯示了在 C 中定義的初始化全局變量。
int i = 23;
int a[5] = { 1, 2, 3, 4, 5 };
相應(yīng)的初始化表如下所示。.cinit:c 段包含所有標(biāo)量數(shù)據(jù),是 .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 段中的表僅包含要調(diào)用的構(gòu)造函數(shù)的地址列表(如下圖所示)。構(gòu)造函數(shù)顯示在表中的 .cinit 初始化后。
圖 6-10 .pinit 段中初始化記錄的格式當(dāng)您使用 --rom_model 或 --ram_model 選項時,鏈接器會組合來自所有 C/C++ 模塊的 .cinit 段,并在 .cinit 復(fù)合段的末尾附加一個空字。此終止記錄顯示為字段大小為 0 的記錄,并標(biāo)記初始化表的末尾。
同樣,--rom_model 或 --ram_model 鏈接選項會使鏈接器組合來自所有 C/C++ 模塊的所有 .pinit 段,并在 .pinit 復(fù)合段的末尾附加一個空字。啟動例程在遇到空構(gòu)造函數(shù)地址時知道全局構(gòu)造函數(shù)表的末尾。
符合 const 條件的變量的初始化方式有所不同;請參閱節(jié) 5.7.1。