当前位置:网站首页>【Autosar vLinkGen 链接器脚本生成器】
【Autosar vLinkGen 链接器脚本生成器】
2022-07-29 19:04:00 【民谣唱给爱人听丶】
Autosar vLinkGen 链接器脚本生成器
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模块提供。它们代表硬件上的实际内存布局,无法更改。
Memory Regions (vLinkGenLinkerMemoryRegion)
逻辑抽象层,用于将配置与实际内存布局分开,并使它独立于硬件。
Memory Region Blocks (vLinkGenMemoryRegionBlock)
可以将其链接到区域的下边界或上边界。它们用于生成的链接描述文件中的实际内存定义。
Section Groups (vLinkGen*SectionGroup)
这些组的大小取决于链接器节的具体内容。
同样,它们的起始地址取决于映射到同一存储区块的先前组的配置位置和大小。
- 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 | 包含预编译时的宏定义的生成文件 |
边栏推荐
猜你喜欢

2022暑假 动态规划总结
![Chapter 01 Installation and use of MySQL under Linux [1. MySQL Architecture] [MySQL Advanced]](/img/f6/8c513ab62c8d3259c9c8ef13887276.png)
Chapter 01 Installation and use of MySQL under Linux [1. MySQL Architecture] [MySQL Advanced]

测试基础:Nosql数据库之Redis

Xcode如何利用预览(Preview)让SwiftUI视图快速适配不同尺寸的设备

Chengdu | Changed to software testing, from zero income to over 10,000 monthly salary, a new turning point in life...

"Additional price" can not exchange for safety, the death of Lexus LM, whose fault is it?

大疆MID 360

无代码开发平台角色设置入门教程

数字孪生万物可视 | 联接现实世界与数字空间

直播预约 | 如何通过MLOps解放和提升AI生产力?
随机推荐
Flink1.15源码阅读flink-clients之GenericCLI、flinkYarnSessionCLI和DefaultCLI
不堆概念、换个角度聊多线程并发编程
成都 | 转行软件测试,从零收入到月薪过万,人生迎来新转折...
How to read excel test data in Go language, easy to learn
2022/7/27
centos8安装mysql8.0.28
手势密码解锁微信小程序项目源码
Idea工具的使用
C language advanced enumeration and joint
FPGA设计8位十进制计数器异步/同步模块以及m序列码产生器模块
word文档里插入图片显示不完整,只显示一半,怎么处理?
DJI MID 360
OAuth2认证
MySQL筑基篇之增删改查
无代码开发平台权限设置入门教程
Test basis: Redis of Nosql database
yarn的安装和使用(yarn安装mysql)
"Additional price" can not exchange for safety, the death of Lexus LM, whose fault is it?
shell 图形化跳板机
leetcode:36. 有效的数独