IAREWARM中段后缀含义
后缀 | 段类型 | 含义 |
AC | CONST | 绝对地址定位常数 |
AN | DATA | 用关键字__no_init声明的绝对地址定位数据 |
C | CONST | 常数 |
I | DATA | 初始化值为非0的数据 |
ID | CONST | 上述数据的初始式 |
N | DATA | 未初始化的数据 |
Z | DATA | 初始化值为0的数据 |
ROM用于保存CONST和CODE段,而RAM用于保存DATAS段。
CODE段类型:ROM 中的执行代码
CONST段类型:ROM中的数据
DATA段类型:RAM 中的数据
常用的段说明:
段名 | 功 能说 明 | 段类型 | 属性 |
INTVEC | 保存Reset 和异常向量,含跳转到cstartup 或中断服务程序的指令。必须在0x00-0x3F 地址范围内 | CODE | 只读 |
ICODE | 保存启动代码,位于能被INTVEC 中的转移指令达到的前32MB 字节内。 | CODE | 只读 |
DIFUNCT | 包含指向C++建构模块的指针。该模块在调用main 之前由cstartup 执行。 | CODE | 只读 |
SWITAB | 保存软件中断向量表 | CODE | 只读 |
CODE | 保存程序代码,可以在ROM 中执行。 | CODE | 只读 |
CODE_ID | 永久性保存声明为_ramfunc 的程序代码。这些代码初始化时从CODE_ID拷贝到CODE_I 中(RAM),然后在RAM 中执行。 | CONST | 只读 |
INITTAB | 保存需要在启动时初始化的段地址和段长度表格。 | CONST | 只读 |
DATA_ID | 保存DATA_I 段中变量的初值,这些值在系统初始化时由cstartup 从DATA_ID 拷贝到DATA_I。 | CONST | 只读 |
DATA_C | 保存常数数据,包括文字字符串 | CONST | 只读 |
CHECKSUM | 保存段的校验和 | CONST | 只读 |
CODE_I | 上电后保存声明为_ramfunc的程序代码,掉电后丢失。初始化时从CODE_ID(ROM)拷贝到CODE_I中,然后在RAM中执行。 | DATA | 读/写 |
DATA_I
| 保存声明为非零初值的静态全局变量,其初值开始在DATA_ID中,系统初始化时由cstartup从DATA_ID 拷贝到DATA_I。 | DATA | 读/写 |
DATA_Z | 保存声明初值为零或没有声明初值的静态全局变量 | DATA | 读/写 |
DATA_N | 保存非易失存储器中,用_no_init 关键字声明的静态全局变量 | DATA | 读/写 |
CSTACK | C/C++内部数据堆栈(用户模式) | DATA | 读/写 |
SVC_STACK | 操作系统堆栈(管理模式,用于具有特权的操作系统任务) | DATA | 读/写 |
ABT_STACK | 数据访问中止模式堆栈(用于虚拟存储器及存储器保护) | DATA | 读/写 |
UND_STACK | 未定义指令中止模式堆栈(支持硬件协处理器软件仿真) | DATA | 读/写 |
FIQ_STACK | 快中断模式堆栈(用于高速数据传输或通道处理) | DATA | 读/写 |
IRQ_STACK | 中断模式堆栈(用于通用中断处理) | DATA | 读/写 |
HEAP | 堆(Heap)是C\C++中为malloc 和 free 或new 和delete 保留的动态分配存储空间。 | DATA | 读/写 |
IAR EWARM中段定位参数
参数 | 含义 |
c | CPU类型 |
D | 定义文件后面要使用的参数,例如说明始末地址或段大小 |
Z | 以连续方式定位段 |
P | 以压缩方式定位段 |
Q | 自动完成段初始化复制 |
-D
-Dsymbol=value
作用:
使用-D选项可以定义一些纯粹的符号,一般用于声明常数。
参数:
symbol是未在其它地方定义过的外部符号,value是symbol所代表的值。例如:
-D_BANK_LEN=0x800
-D_BANK_START=0x1800
-D_BANK_STEP=0x10000
-D_BANK_NUM=0x40
就定义了2个标识了ROM起始和结束地址的符号,这样以后关于ROM地址的配置都可以直接使用这2个符号,使得配置文件的可读性增强。
在//前面必需有空格
/*前面可有可无空格
=前后都不能有空格在
_BANK_STEP紧挨着-D
-Z
-Z[@][(SPLIT-)type]segments[=|#]range[, range]…
作用:
使用-Z命令的目的是规定segments在存储空间中占据的位置和区间。如果链接器发现某个segment没有使用-Z,-b或者-P中的任何一个命令进行定义,则会报错。
参数:
@ 使用@参数,表示为segments分配空间时不考虑任何已经被使用的地址空间。这适用于当某些segments的地址空间需要发生重叠的情形。【可选】
type 参数type规定了segments的存储类型,默认为UNTYPED。表1列举了IAR的ARM C/C++编译器所支持的segments类型。【可选】
segments:参数segments列出了参与链接的一个或多个segment,中间可用逗号分隔。,这些segments在存储空间中的顺序和被列出的先后顺序一致。在segment名后面添加‘+nnnn’,可以让XLINK为该segment所分配的空间增加nnnn字节。
= | #;规定了segments在存储空间中如何分配,其中”=“从指定范围的起始处开始为segments分配空间,而”#“从指定范围的结尾处开始为segments分配空间。如果这两个参数都没有出现,则segments会被分配在当前最后一个有确定链接地址的segment后面;如果当前没有任何segment被链接,则被分配在0地址。
-Z(CODE)MAKECODE_CONST=0xFF0000-0xFF00FF
-Z(XDATA)ECHO_BUF=0xa4400:+0x2000
-P
-P(CODE)BT_ON_SEG,BT_ON_CONST,RF_SEG=[_BANK_START:+_BANK_LEN]*_BANK_NUM+_BANK_STEP
用,分割相同的段
-Q
-Qsegment=initializer_segment
作用:
自动设置segment的拷贝初始化。链接器会产生一个新的initializer_segment(如CODE_ID),其内容与segment(如CODE_I)完全一致。相关的符号表和调试信息都会和segment相关联(如CODE_I)。initializer_segment的内容(通常在ROM中)必须在初始化阶段被复制到segment(通常在RAM中)。
-c
-cprocessor
作用:
规定目标处理器的类型。如-carm。