Memory Layout按存储内容主要分为:
1、代码
2、运行在RAM中的代码
3、常量
4、初始化的全局变量
5、未初始化的全局变量
6、堆栈
Step1:
对于链接文件最重要的是将分配的段(Section)分配到固定的位置(MemLayout).这些段可以打包成一个Group。
因此最重要的是段的定义,段的定义根据存储内容的不同分为:
1、代码段
2、常量段
3、堆栈段
4、初始化及未初始化的变量段
一、代码段又分为:
1、启动代码段
2、运行在RAM中的代码段
3、Option Byte
4、任务及中断代码
5、其他代码段
二、常量段分为:
1、中断向量表
2、Autosar OS的一些配置参数转化的常量
3、其他的常量
三、堆栈区
1、Task及中断都配置的有堆栈
2、OS中使用的堆栈
四、初始化及未初始化的变量
1、bss、data区
2、Autosar OS定义的一些全局变量
Step2:
一、当相关Section定义完成后,要以组的形式对其进行约束
1、Code和Constant Section被指定在Const Group
2、相关Group可以控制被指定存在在哪个分配的Memeory Section中
3、对于需要拷贝在RAM中运行的部分可以通过相关Group来指定
4、在Group中可以对相关Section(段)再组合为更大的Section Group。同时可以对相关Section Group的对齐方式及初始化方式进行设定
Step3:
在链接文件中可以定义一些符号变量,这些符号变量可以在代码中使用,需要在头文件或者源文件中对相关符号变量进行声明.
如:定义一个段的起始及结束定义成相关符号变量,在代码中可以检测相关的符号变量,从而获得相应的地址信息。
在链接文件中定义Symbol这个Symbol其有相应的地址。可以在vLinkGen中定义相关的Symbol时既可以使用链接文件中定义的符号也可以使用绝对地址。如上_RESET使用的是符号,也可以在Value中填写绝对地址。
同时如果要在代码中使用相应的符号变量,需要在头文件或者源文件中对相应符号进行声明。
可以看到FunctionInRam_START_SEC的值和FunctionInRam$$Base的值是一致的。
Step4:
变量段控制
1、初始化的变量
2、未初始化的变量
3、Task及ISR中分配的堆栈
Step5:
这是最重要的一部分,它是对芯片存在结构的具体划分:
1、中断向量表
2、OPTION BYTE
3、代码区
4、堆栈区
上述代码区和堆栈区还可以再划分成小区域来存在不同功能的数据
如
堆栈区可能还要划分出一部分来存储在RAM中运行的程序
代码区中要划分出启动代码区及常规代码区
在堆栈区中最好开辟出来一部分启动代码使用到的堆栈区域。