IAR ILINK 链接脚本
sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理 解ICF文件的内容尤其重要。
一个标准的ICF文件可包括下面这些内容:
1. 可编址的存储空间(memory)
2. 不同的存储器地址区域(region)
3. 不同的地址块(block)
4. Section的初始化与否
5. Section在存储空间中的放置
下 面介绍了几条ICF文件中常见的指令,详细内容请参考ILINK相关说明文档(EWARM_DevelopmentGuide.pdf):
1. define [ exported ] symbol name = expr;
作用: 指定某个符号的值。
参数: exported 导出该symbol,使其对可执行镜像可用
name --符号名
expr --符号值
举例:
define symbol RAM_START_ADDRESS = 0x40000000;
define symbol RAM_END_ADDRESS = 0x4000FFFF;
2. define memory name with size = expr [, unit-size];
作用: 定义一个可编址的存储地址空间(memory)。
参数: name --memory的名称
expr --地址空间的大小
unit-size --expr的单位,可以是位(unitbitsize),缺省是字节(unitbytesize)
举例:
define memory MEM with size = 4G;
3. 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];
4. define block name[ with param, param... ]
{
extended-selectors
};
作用: 定义一个地址块(block);它可以是个空块,比如栈、堆;也可以包含一系列sections。
参数: name block的名称
param 可以是: size = expr (块的大小)
maximum size = expr (块大小的上限)
alignment = expr (最小对齐字节数)
fixed order (按照固定顺序放置sections)
extended-selector [ first | last ] { section-selector | block name | overlay name }
first 最先存放
last 最后存放
section-selector [ section-attribute ][section-type][ section sectionname ][object filename ]
section-attribute-- [ ro [ code | data ] | rw [ code | data ] | zi ]
section-type – preinit_array|init_array
sectionname -- section的名称
object filename 目标文件的名称
即可以按照section的属性,名称及其所在目标文件的名称这三个过滤条件中,任意选取一个条件,或选取多个条件进行组合,来圈定所要求的 sections。
name block或overlay的名称
举例:
define block HEAP with size = 0x1000, alignment = 4 { };
define block MYBLOCK1 = { section mysection1, section mysection2, readwrite };
define block MYBLOCK2 = { readonly object myfile2.o };
5. initialize { by copy | manually } [ with param, param... ]
{
section-selectors
};
作用: 初始化sections。
参数: by copy 在程序启动时自动执行初始化。
manually 在程序启动时不自动执行初始化。
param 可以是: packing = { none | compress1 | compress2 | auto }
copy routine = functionname
packing表示是否压缩数据,缺省是auto。
functionname表示是否使用自己的拷贝函数来取代缺省函数。
section-selector 同上
举例:
initialize by copy { rw };
6. do not initialize
{
section-selectors
};
作用: 规定在程序启动时不需要初始化的sections。一般用于__no_init声明的变量段(.noinit)。
参数: section-selector 同上
举例:
do not initialize { .noinit };
7. place at { address memory[: expr] | start of region_expr | end of region_expr }
{
extended-selectors
};
作用: 把一系列sections和blocks放置在某个具体的地址,或者一个region的开始或者结束处。
参数: memory memory的名称
expr 地址值,该地址必须在memory所定义的范围内
region_expr region的名称
extended-selector 同上
举例:
place at start of ROM { section .cstart }; place at end of ROM { section .checksum }; place at address MEM:0x0 { section .intvec };
8. place in region-expr
{
extended-selectors
};
作用: 把一系列sections和blocks放置在某个region中。sections和blocks将按任意顺序放置。
参数: region-expr region的名称
extended-selector 同上
举例:
place in ROM { readonly }; /* all readonly sections */
place in RAM { readwrite }; /* all readwrite sections */
place in RAM { block HEAP, block CSTACK, block IRQ_STACK };
place in ROM { section .text object myfile.o }; /* the .text section of myfile.o */
place in ROM { readonly object myfile.o }; /* all read-only sections of myfile.o */
place in ROM { readonly data object myfile.o }; /* all read-only data sections myfile.o */
FROM:http://blog.21ic.com/user1/5910/archives/2009/61982.html
IAR的ICF文件中宏给程序使用
如果想定在rom空间
icf中:
place at address mem:0x08090000 { readonly section .test };
C:中:
#pragma location = ".test"
const u32 uiData[512];// const 切不可省略
如果想定在ram空间
icf中:
place at address mem:0x08090000 { readwrite section .test };
C:中:
#pragma location = ".test"
u32 uiData[512];
可发现uiData的值为0x08090000
该法可方便通过ICF指定某变量的地址。
程序也可以。写法类似.vector
如果用block的方。类似
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
C中:
#pragma language="extended"
#pragma segment="CSTACK"
ptr = __sfe( "CSTACK" );可得到CSTACK的高端地址+1
__sfe: Returns last address of segment.
IAR ILINK 链接脚本相关推荐
- IAR编译环境之:ILINK链接器的.ICF文件编写
1.首先说说什么是icf文件(即ILINK链接器的配置文件)的作用,其实在IAR5.x之前,IAR是采用的叫XLINK的链接器(它相应的配置文件为xcl文件),5.x之后才采用了新版ILINK链接器, ...
- 【转贴】解析IAR的ILINK链接器icf配置文件
五一来了,三天小假期终于可以让大家歇一歇了(估计好多人都已经在规划着五一出行计划了或者已经在旅途中了),校园里一下子冷清了不少.记得去年12月份曾经写过一篇"写在圣诞节之简单破解飞思卡尔HC ...
- 【转】解析IAR的ILINK链接器icf配置文件
原文:http://blog.chinaaet.com/jihceng0622/p/27024 介绍介绍IAR的icf配置文件,其实这算是一篇知识深入扩展,初手在用IAR简单开发一款片子的时候很少有人 ...
- 解析IAR的ILINK链接器icf配置文件
五一来了,三天小假期终于可以让大家歇一歇了(估计好多人都已经在规划着五一出行计划了或者已经在旅途中了),校园里一下子冷清了不少.记得去年12月份曾经写过一篇"写在圣诞节之简单破解飞思卡尔HC ...
- 解析IAR的ILINK链接器icf文件(转)
解析IAR的ILINK链接器icf文件 转载于:https://www.cnblogs.com/LittleTiger/p/5534582.html
- [学习笔记 ]IAR的链接配置.icf文件详解——RT1052芯片的链接文件
本文主要通过以下几个部分解释IAR中的链接配置icf文件: 1.参考解析IAR的ILink链接器icf配置文件介绍icf文件作用以及icf文件主要内容: 2.介绍icf常使用的命令 3.RT1052芯 ...
- makefile使用.lds链接脚本以及 $@ ,$^, $, 解析
先来分析一个简单的.lds链接脚本 例1,假如现在有head.c init.c nand.c main.c这4个文件: 1.1 首先创建链接脚本nand.lds: 1 SECTIONS { 2 fir ...
- 软件构建之链接应用--链接脚本
链接脚本的基本概念 链接脚本用于描述链接器如何将输入文件格式化为可执行的输出文件,所谓输入文件既为汇编后的目标文件(.o或.obj等结尾). 基本命令: ENTRY (Symbol) 用于设置程序第一 ...
- 重写了GD32VF103的启动脚本和链接脚本
官方的startup和链接脚本有点乱七八糟的,像是调试早期写的东西.我重新整理了下. 启动脚本去掉了中断向量表表部分,能节省一部分代码空间,后续可以自己定义,只要对齐到512字节(这样支持最多128个 ...
最新文章
- Swift3.0语言教程使用占位符格式创建和初始化字符串
- Android --- Serializable 接口与 Parcelable 接口的使用方法和区别,怎么选择?
- lazada开店平台费用都有哪些,产品如何来做定价?
- 无权无向和加权网络的聚类系数
- OpenStack 的部署T版(一)——基础环境配置
- 等级考试文件服务器,内核级 Samba 文件共享服务器 CIFSD 正式开始测试
- elasticsearch index 之merge
- 【Elasticsearch】使用自适应副本选择改进弹性搜索的响应延迟
- 第一部分:基础知识(第一章)File | New | Project
- idea生成类注释和方法注释的方法
- 什么叫共轭先验或者共轭分布?
- Mac电脑常用软件安装
- 学习使用php简单读取pdf文件总页数的方法
- 【DSP】TMS320C64x系列--SPRU871参考手册--中断控制器部分
- Debian7虚拟机安装
- aardio - 【库】plusList——二次封装plus自绘组件库
- 解放生产力,CSS3帧动画工具
- 东北大学计算机硬件题库,东北大学20春学期《计算机硬件技术基础》在线平时作业123答案100...
- 目标检测使用的数据增强方法汇总
- 浅谈Session并且实现购物车
热门文章
- 跟HR谈工资的技巧 纯干货 找工作必看
- 艺术是谎言,但它述说真理
- 数组与字符串长度 — C语言经典方法
- mysql text not null_【20181101】MySQL text类型的column设置为NOT NULL 导致主从1364
- java中高级JAVA工程师-面试题汇总
- VQA+Visual Reasoning SOTA探索
- 【比赛题解】2020蓝桥杯青少组省赛(中级组)部分题解
- [原创]ExtAspNet秘密花园(二) mdash; 一切从头开始
- 环保产业发展前景:“智能化”为绿色环保注入新动能
- Leetcode学习之回溯算法