ZHCU947E June 2015 – January 2023
链接器支持特殊的复制表名称 BINIT(或 binit);您可以使用该名称来创建启动时复制表。使用 .cinit 段在启动时初始化变量之前该表会被处理。例如,GUID-2A7EAC74-8FC1-46CF-8B86-D0F43F23FDFE.html#GUID-2A7EAC74-8FC1-46CF-8B86-D0F43F23FDFE中所述的启动加载应用程序的链接器命令文件可以重写如下:
SECTIONS
{
.flashcode: { app_tasks.c.obj(.text) }
load = FLASH, run = PMEM,
table(BINIT)
...
}
对于此示例,链接器会创建一个复制表,可通过链接器生成的一个特殊符号 __binit__ 来访问该表,其中包含需要在启动时从加载位置复制到运行位置的所有对象组件的列表。如果链接器命令文件未在任何情况下使用 table(BINIT),则会向 __binit__ 符号赋值 -1 以指示某个特定应用程序不存在启动时复制表。
您可以将 table(BINIT) 规格应用于输出段、GROUP 或 UNION 成员。如果是在 UNION 的上下文中使用,则只能使用 table(BINIT) 指定 UNION 的一个成员。如果是应用于 GROUP,则该 GROUP 的任何成员都不能用 table(BINIT) 进行标记。链接器会检测违反这些规则的情况,并作为警告报告,但会忽略每次违规使用 table(BINIT) 规格的情况。