原创 RV MDK链接脚本的详细解析

2008-8-1 12:56 4950 8 14 分类: MCU/ 嵌入式

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


使用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


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


当使用链接控制命令选项时,链接器定义了Image$$RW$$BaseImage$$RW$$LimitImage$$RO$$BaseImage$$RO$$LimitImage$$ZI$$BaseImage$$ZI$$Limit6个段地址描述符。这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) ; 所有清零数据都连续地放在这个区域。


}


}


 


 


 

PARTNER CONTENT

文章评论6条评论)

登录后参与讨论

用户158440 2008-8-2 22:38

very good .

用户160112 2008-8-2 18:42

你能不能写一份详细的指令出来呢?

用户391193 2008-8-2 00:30

很有帮助,谢谢!

用户154505 2008-8-1 17:03

要看完?那要慢慢看啦

用户89953 2008-8-1 14:51

几篇文章我全都看完了。收获不小。

daiqiumiao_806246054 2008-8-1 14:42

呵呵,有时候遇到一些问题真是很郁闷的。所以软件还是要弄熟悉。
相关推荐阅读
daiqiumiao_806246054 2011-01-06 13:57
linux下yum代理设置
    我们在安装好linux后,经常会使用yum来更新系统,但是系统默认的代理是国外的,国内一般的网络不能访问,这里讲解具体做法,把代理换成国内的。attachment download      ...
daiqiumiao_806246054 2010-12-30 09:48
【转】ORACLE 10g下载地址
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit...
daiqiumiao_806246054 2010-11-29 11:06
找工作的进来看
如下是我所有的开放性问题回答,希望对大家有帮助!1.      When choosing your first job/employer, what will you consider and wh...
daiqiumiao_806246054 2010-11-29 09:47
中长期规划---螺旋式上升方式修改完善职业之路
一、中长期职业发展的自我准备1、心态上随时做好准备 机会是给有准备的人的------“有准备”是你在做准备的过程中让“别人”认为你“有准备”!别人是包括你现在的老板和别的老板,以及你身边的人!他们对你...
daiqiumiao_806246054 2010-03-17 21:26
移动
分集方式传输损耗和距离关系光纤网络G网...
daiqiumiao_806246054 2010-03-17 09:40
GSM
特点  使用直观  GSM系统有几项重要特点:防盗拷能力佳、网络容量大、手机号码资源丰富、通话清晰、稳定性强不易受干扰、信息灵敏、通话死角少、手机耗电量低。  技术特点  1.频谱效率。由于采用了高效...
我要评论
6
8
关闭 站长推荐上一条 /3 下一条