1. 概述
2. 在AUTOSAR架构中的位置
3. 支持的编译器
4. 内存分区
4.1 内存分配细节
4.2 数据段初始化
5. 集成或生成文件
1. 概述
vLinkGen模块 提供一种创建链接器脚本的抽象方法。 以便将二进制代码,常量和变量(链接器符号)放置在目标内存(例如ROM,RAM等)中的预定义位置。
vLinkGen的基本思想是 提供一个独立于编译器的连接器描述方法(分配到硬件具体的内存区域除外)。方便能够以类似的方式将其应用于其他项目。
链接程序脚本的配置可以完全完成,而无需了解编译器特定的链接程序脚本语言。然后,vLinkGen会以适合所选编译器的格式生成链接器脚本。
2. 在AUTOSAR架构中的位置
3. 支持的编译器
Compiler Name Version Restrictions
ARM only 5.x.x, 6.x.x or later
Wind River Diab -
GCC -
Green Hills -
HighTec (GCC) -
IAR only 7.x.x or later
Linaro (GCC) -
Renesas -
Tasking -
Texas Instruments -
4. 内存分区
Hardware Memory Areas (vBaseEnvMemLayoutHwRegion)
由vBaseEnv模块提供。它们代表硬件上的实际内存布局,无法更改。
1
Memory Regions (vLinkGenLinkerMemoryRegion)
逻辑抽象层,用于将配置与实际内存布局分开,并使它独立于硬件。
1
Memory Region Blocks (vLinkGenMemoryRegionBlock)
可以将其链接到区域的下边界或上边界。它们用于生成的链接描述文件中的实际内存定义。
1
Section Groups (vLinkGen*SectionGroup)
这些组的大小取决于链接器节的具体内容。
同样,它们的起始地址取决于映射到同一存储区块的先前组的配置位置和大小。
1
2
CONST and VAR Section Groups (vLinkGenLinkerSectionGroup)*
常量和变量段组
Linker Section
最小的实体,包含源代码中分配给它们的不同链接器符号(函数,常量,变量等)的具体内容。
在编译器手册中,它们通常称为“输入节”。
4.1 内存分配细节
如何生成各个输出类型在编译器特定的链接器脚本中
4.2 数据段初始化
根据配置,vLinkGen生成一些结构(初始化表)可以用来
初始化内存区域块与零初始化(ECC)
初始化变量部分组与具体数据(INIT)或0 (ZERO_INIT)。
将代码从ROM复制到RAM,以便在那里执行。
这种初始化通常由vBRS的启动代码执行。
NONE 无需初始化。
INIT 用预定义值(ROM到RAM的副本)初始化section group中的所有变量数据。
ZERO_INIT 用零完全初始化section group中的所有变量数据。
NONE 未配置初始化。
EARLY 复位后总是直接初始化。仅在确实必要时使用。由于PLL那时可能未初始化,因此大区域的初始化可能需要很长时间。
ZERO 始终在默认vBRS启动例程期间首先进行初始化。
ONE 始终在默认vBRS启动例程期间进行第二次初始化。默认情况下,如果需要初始化,则应使用此值。
HARD_RESET_ONLY 在第一阶段之后立即初始化。但是,仅在发生硬件重置时才进行初始化。
TWO、THREE 可选的初始化阶段,将在HARD_RESET_ONLY阶段之后相应地初始化。仅在确实必要时使用。
5. 集成或生成文件
File Name Description
vLinkGen_Template.< ext > < ext >是后缀, 是一个链接文件。
vLinkGen_InitSections_Lcfg.c 包含初始化列表的生成文件
vLinkGen_InitSections_Lcfg.h 包括类型定义和初始化列表外部声明的生成文件
vLinkGen_InitSections_Cfg.h 包含预编译时的宏定义的生成文件