CodeWarrior LCF链接文件定义及使用
sdata_type \
sconst_type \.sdata2\
2)ALIGN
按照指定的边界进行排列,必须是2的整倍数。 SECTIONS {
GROUP:
{
.init ALIGN(0x1000) : {} .text ALIGN(0x1000) : {} } > text }
例子中定义了两个段:.init和.text。在运行的时候每个段都会被放在下一个可以使用的地址(可以被0x1000整除) 3)ADDR
返回指定名称的段或者内存区域的开始地址. ADDR(sectionName | segmentName) 参数
sectionName 文件中段的标志符 segmentName
存储区域中段的标志符 范例 下面代码中使用的ADDR功能来将ROOT的地址赋值给__rootbasecode . 列举ADDR() 功能 MEMORY{
ROOT : origin = 0x80000400, length = 0 }
SECTIONS{ .code :
Auto FAE: Alan Yang-r66151
Page 6 data_mode=sda_rel code_mode=pc_rel data_mode=sda_rel code_mode=pc_rel
\data_mode=sda_rel code_mode=pc_rel
CodeWarrior LCF链接文件定义及使用
{
__rootbasecode = ADDR (ROOT); *.(text); } > ROOT }
4)SIZEOF
返回指定Section或者segment的大小(以字节为单位) SIZEOF(segmentName | sectionName) 参数
segmentName
segment的名字;必须以“.”作为起始。 sectionName
section的名字;必须以“.”作为起始。
5)LOAD
在指定地址加载一个或者多个段。 语法
LOAD(address) 参数
address
一个内存地址例如: 0x80000400. 注意 ? ? ? ?
使用load指令来指定一个外部的ROM addr_mode。 Load指令可以被用于所有的在ROM中的段。
如果编译器选项面板中的Generate ROM image 没有被选择的话,指令会被在链接中忽略。
从ROM拷贝到RAM中的不连续的未初始化的数据段可能需要参考ROM的地址。举例来说:保存紧跟在.text段后面的.data和.sdata段到ROM中,可以尝试下面的例子: .text LOAD(ADDR(.text)) : {} > rom
.data LOAD(ROMADDR(.text) + SIZEOF(.text)): {} > code .sdata LOAD(ROMADDR(.data) + SIZEOF(.data)): {} > code
Auto FAE: Alan Yang-r66151
Page 7 CodeWarrior LCF链接文件定义及使用
6)BIND
指定一个段修饰语来设定一个地址。 BIND(address) 参数 address
一个存储空间地址例如: 0x80000400.
7)pop, push
保存和恢复pragma设置 语法
#pragma push #pragma pop
pragma push 保存所有当前的pragma设置。Pragma pop 恢复所有pragma设置 范例
#pragma ANSI_strict on
#pragma push /* Saves all compiler settings. */ #pragma ANSI_strict off #pragma pop /* Restores ANSI_strict to on. */ 例程中的pragma不受任何面板设置影响,和之前其它的pragma的设定
8)__declspec(section name) 指定在已经定义的section中放置变量或者函数 语法
__declspec(section
Auto FAE: Alan Yang-r66151
Page 8 CodeWarrior LCF链接文件定义及使用
参数
section_name
指定一个初始化过的数据段的名字 注意 段的名字必须用双引号 (\如果使用用户自定义的段,必须是事先用#pragma定义过的
9)FORCEACTIVE
指定不能被优化掉的目标. 参数
FORCEACTIVE{ symbol [, symbol]* }
第二节 EPPC 链接器
使用 EPPC Linker 设置面板来控制设定链接相关选项,规定目标代码链接成的可执行文件,库或者其它的最终文件格式。如下图所示2.10版本(图2-1)和10.3版本(图2-2)
图2-1:Codewarrior 2.10 版本
Auto FAE: Alan Yang-r66151
Page 9 CodeWarrior LCF链接文件定义及使用
图2-2:codewarrior 10.3版本 Auto FAE: Alan Yang-r66151
Page 10