Realview MDK中链接脚本详细解析

11 篇文章 0 订阅
9 篇文章 0 订阅
我们在以前的文章里面说过一些链接脚本的应用,但是还是没能系统的介绍,也没有能体现出它的重要性,下面我们来着重介绍一下:

使用ARM使用Realview MDK时不可避免的要涉及到链接脚本文件,特别是编译链接那些大的工程文件时更是如此。在编译大的工程文件的时候,如果不掌握好一些链接脚本的编写方法的话,那么有可能会使内存溢出而编译不通过,这样子那就真的比较麻烦了。那么链接脚本有哪些功能呢?

在链接脚本中可以指定代码的存储布局,可以将代码段、只读数据段、可读写的数据段分别存放,甚至可以精确地指定代码放置的位置,这一点是很NB的,譬如说启动代码就必须放在可知型文件的开始位置。

由于链接脚本重要性,开发者必须掌握其编写的方法。 Realview MDK链接程序使用了两种方式控制程序的链接,即链接控制命令选项和链接脚本文件。这些在哪里打开我相信只要看过偶的以前写的文章都已经知道了吧?在project – options – linker里面,如下图:



点一下edit,我们就可以开始编辑那个链接脚本啦!

内容是:

LR_IROM1 0x08000000 0x00020000 { ; load region size_region

ER_IROM1 0x08000000 0x00020000 { ; load address = execution address

*.o (RESET, +First)

*(InRoot$$Sections)

.ANY (+RO)

}

RW_IRAM1 0x20000000 0x00005000 { ; RW data

.ANY (+RW +ZI)

}

}

呵呵。看下面就知道了。


http://blog.ednchina.com/likee/138772/message.aspx


当使用链接控制命令选项时,链接器定义了Image$$RW$$Base、Image$$RW$$Limit、Image$$RO$$Base、Image$$RO$$Limit、Image$$ZI$$Base和Image$$ZI$$Limit等6个段地址描述符。这6个描述符可以直接在程序中引用。而在使用链接脚本文件后,这6个描述符号没有了,取而代之的是链接脚本文件中的段描述符,格式为:Image$$段名$$Base 和Image$$段名$$Limit。

下面在网上抄了两个例子,给大家消化。

例1 一个加载区域,多个连续的执行区域。

LR_1 0x040000 ; 定义载入区域LR_1的起始地址为0x040000。

{

ER_RO +0 ; 执行区域ER_RO的起始地址紧接载于区域LR_1的起始地址,即为0x040000.

{ * (+RO) ; 所有的只读代码段都连续地放在这个区域。

}

ER_RW +0 ; 可读写数据段ER_RW紧接ER_RO段的尾地址存放,即0x040000 + ER_RO的容量。

{

* (+RW) ; 所有的可读写的程序都连续地放在这个区域。

} ER_ZI +0 ; 清零数据段ER_ZI紧接ER_RW段的尾地址存放。

{

* (+ZI) ; 所有清零数据都连续地放在这个区域。

}

}


例2 一个加载区域,多个非连续的执行区域。

LR_1 0x010000 ; 定义载入区域LR_1的起始地址为0x010000。

{

ER_RO +0 ;执行区域ER_RO的起始地址紧接载于区域LR_1的起始地址,即为0x010000.

{

* (+RO) ; 所有的只读代码段都连续地放在这个区域。

}

ER_RW 0x040000 ; 定义可读写数据段ER_RW的起始地址为0x040000.

{

* (+RW) ; 所有的可读写的程序都连续地放在这个区域。

} ER_ZI +0; 清零数据段ER_ZI紧接ER_RW段的尾地址存放,即为0x040000 + ER_RW的容量。

{

* (+ZI) ; 所有清零数据都连续地放在这个区域。

}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值