IAR for stm8 中指定编译的起始地址(转)
已经用STVD+cosmic完成了IAP功能,但想试着在STM8上跑上官的UCOS,不得不用IAR编译,但编译后代码的生成地址怎么再从0X9000开始生成呢,找遍全网,也没有发现三言两语直接的表白,又对IAR环境不熟,看过了IAR下的工程设置的全部选项,都没有发现怎么修改这个地址,IAR的这个地址的修改,并不象KEIL及STVD下那么直接,它必须通过IAR的根目录下有个CONFIG的文件夹,里面有各种单片机的*.icf的文件,我看着有两处0x8000改为0x9000,然后编译文件,呵呵,果然有效,在STVP下,发现HEX文件就是从0x9000开始生成代码了。找的好辛苦,又不太懂英文看帮助,唉,只能受此罪!
ICF个人工作总结简短修改的是以下三项:
define region NearFuncCode = [from 0x9000 to 0xFFFF];
define region FarFuncCode = [from 0x9000 to 0xFFFF];
define region HugeFuncCode = [from 0x9000 to 0xFFFF];
以下是摘抄的有关ICF文件部分
IAR中xcl及icf文件详解
链接器和链接器的配置
2.1 EWARM&的链接器XLINK及其配置文件.xcl
XLINK链接器可以把IAR汇编器或编译器所产生的可重定位的UBROF目标文件转换成针对目标处理器的机器码。XLINK一般通过外部链接器命令文件(*.xcl)来配置,当然也可以在命令行中直接在xlink命令之后输入链接选项,或者也可以在XLINK_ENVPAR环境变量中设置链接选项。下面介绍XCL喷泉英文文件中常用的链接选项,以便在版本迁移之前,确切地了解XCL文件的含义。
2.2 XLINK选项
下面介绍几个XCL文件中常见的链接器配置选项。更详细的内容请查阅XLINK的参考手册:
体育俱乐部IAR Linker and Library Tools Reference Guide。
-D -Dsymbol=value
作用:
使用-D选项可以定义一些纯粹的符号,一般用于声明常数。
参数:
symbol是未在其它地方定义过的外部符号,value是symbol所代表的值。例如:
就定义了2个标识了ROM起始和结束地址的符号,这样以后关于ROM地址的配置都可以直接使用这2个符号,使得配置文件的可读性增强。
-Z -Z [@] [(SPLIT-)type] gments [=|#] range [, range] …
作用:
使用-Z命令的目的是规定gments在存储空间中占据的位置和区间。如果链接器发现某个
gment没有使用-Z,-b或者-P中的任何一个命令进行定义,则会报错。
参数:
@ 使用@参数,表示为gments分配空间时不考虑任何已经被使用的地址空间。这适用于当某些gments的地址空间需要发生重叠的情形。
type 参数type规定了gments的存储类型,默认为UNTYPED。表1列举了IAR对数函数性质的ARM C/C++编译器所支持的gments类型。
-Q -Q gment = initializer_gment
作用:
自动设置gment的拷贝初始化。链接器会产生一个新的initializer_gment(如CODE_ID),其内容与gment(如CODE_I)完全一致。相关的符号表和调试信息都会和gment相关联(如CODE_I)。initializer_gment的内容(通常在ROM中)必须在初始化阶段被复制到gment(通常在RAM中)。
-
c -cprocessor
作用:
规定目标处理器的类型。如-carm。
.3 EWARM&土耳其海峡的链接器ILINK及其配置文件.icf
EWARM&中的链接器称为ILINK。ILINK可以从ELF/DWARF格式的目标文件中提取代码和数据,并生成可执行映像。在EWARM&中,基本的代码和数据链接单元是gment,而对于ELF/DWARF格式而言,基本链接单元是ction。ILINK根据ILINK Configuration File(*.icf)来分配这些ctions。由于XLINK与ILINK是两个完全不同的链接器,所以XCL和ICF也是两种完全不同的配置文件。下面简要介绍ICF文件的格式和内容,以协助用户完成版本迁移。
2.4 ICF格式浅析
ctions在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置ctions的,所以理解ICF文件的内容尤其重要。
一个标准的ICF文件可包括下面这些内容:
1. 可编址的存储空间(memory)
2. 不同的存储器地址区域(region)
3. 不同的地址块(block)
4. Section的初始化与否
5. Section在存储空间中的放置
下面介绍了几条ICF文件中常见的指令,详细内容请参考ILINK相关说明文档(EWARM_DevelopmentGuide.pdf):
define [ exported ] symbol name = expr;
作用:
指定某个符号的值。
参数:
响沙湾exported 导出该symbol,使其对可执行镜像可用
name 开始幸福符号名
expr 符号值
举例:
define symbol RAM_START_ADDRESS = 0x40000000;
define symbol RAM_END_ADDRESS = 0x4000FFFF;
define memory name with size = expr [, unit-size];
作用:
定义一个可编址的存储地址空间(memory)。
参数:
name memory的名称
expr 地址空间的大小
unit-size expr的单位,可以是位(unitbitsize),缺省是字节(unitbytesize)
举例:
define memory MEM with size = 4G;
define region name = region-expr;
作用:
定义一个存储地址区域(region)。一个区域可由一个或多个范围组成,每个范围内地址必须连续,但几个范围之间不必是连续的。
参数:
name region的名称
region-expr memory:[from expr { to expr | size expr}],可以定义起止范围,也可以定义起始地址和region的大小
举例:
define region ROM = MEM:[from 0x0 size 0x10000];
define region ROM = MEM:[from 0x0 to 0xFFFF];
define block name[ with param,& ]
{
extended-lectors
};
作用:
定义一个地址块(block);它可以是个空块,比如栈、堆;也可以包含一系列ctions。
参数:
name block的名称
param 可以是: size = expr (块的大小)
maximum size = expr (块大小的上限)
alignment = expr (最小对齐字节数)
fixed order (按照固定顺序放置ctions)
extended-lector [ first | last ] { ction-lector | block name | overlay name }
first 最先存放
last 最后存放
ction-lector [ ction-attribute ][ ction ctionname ][object filename ]
ction-attribute [ readonly [ code | data ] | readwrite [ code | data ] | zeroinit ]
ctionname ction的名称
filename 目标文件的名称
即可以按照ction的属性,名称及其所在目标文件的名称这三个过滤条件中,任意选取一个条件,或选取多个条件进行组合,来圈定所要求的ctions。
name block或overlay的名称
举例:
define block HEAP with size = 0x1000, alignment = 4 { };
define block MYBLOCK1 = { ction myction1, ction myction2, readwrite };
define block MYBLOCK2 = { readonly object myfile2.o };
initialize { by copy | manually } [ with param,& ]
{
ction-lectors
};
作用:
初始化ctions。
参数:
by copy 在程序启动时自动执行初始化。
manually 在程序启动时不自动执行初始化。
param 可以是: packing = { none | compress1 | compress2 | auto }
copy routine = functionname
packing表示是否压缩数据,缺省是auto。
functionname表示是否使用自己的拷贝函数来取代缺省函数。
ction-lector 同上
举例:
initialize by copy { rw };
do not initialize
{
ction-lectors
};
作用:
规定在程序启动时不需要初始化的ctions。一般用于__no_init声明的变量段(.noinit)。
参数:
ction-lector 同上
举例:
do not initialize { .noinit };
place at { address memory[: expr] | start of region_expr | end of region_expr }
{
extended-lectors
};
作用:什么是计算机软件
把一系列ctions和blocks放置在某个具体的地址,或者一个region的开始或者结束处。