链接文件用来控制不同类型数据代码、数据以某种排列方式在最终在生成的可执行文件或者二进制文件,调试文件中的放置位置。它可以通过在EPPC linker的面板中进行配置,也可以直接在lcf文件中直接进行修改。
Lcf文件中首先是对整个memory map(MEMORY)地址空间内的所有RAM,ROM进行分割,将其分为几个区域,便于放置不同类型的存储内容,而这些区域内包含的内容可以是用户自定义的段或者系统预定义的段(SECTION)。如下图所示, 对单片机存储空间的定义,不同的段的起始地址,不能叠加地址空间:
下面是SECTION段的定义:
LCF文件中预定义的各个段的名称及解释见下表:
下面是一些编译器地址指定定义:
接下来我们看一些常用的关键字:
1)SECTION
Section使用pragma来将编译的目标代码放到预定义段中,然后可以在LCF文件中将对应的段放到指定的地址区域。Section和__declspec(section)都可以用来指定一个段,但是不能同时使用。Eg:
我们可以在MAP文件中看到cal_A_v和cal_B_v被指定到.referencepage中,而在LCF文件中.referencepage LOAD (0x00160000):{}> rp,所以cal_A_v和cal_B_v的起始地址被指定到0x00160000
2)ALIGN
按照指定的边界进行排列,必须是2的整倍数。Eg:
3)ADDR
返回指定名称的段或者内存区域的开始地址.
4)SIZEOF
返回指定Section或者segment的大小(以字节为单位) Eg:
5)LOAD
在指定地址加载一个或者多个段。 Eg:
6)pop, push
保存和恢复pragma设置 Eg:
7)FORCEACTIVE
指定不能被优化掉的目标. Eg: