我可以: 邀请好友来看>>
ZOL星空(中国) > 硬件星空(中国) > 系统软件与网络星空(中国) > 软件下载星空(中国) > 嵌入式编程第三篇:MDK中链接脚本解析
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

嵌入式编程第三篇:MDK中链接脚本解析

100浏览 / 1回复

weixin_38r2i...

weixin_38r2i235

0
精华
25
帖子

等  级:Lv.1
经  验:99
  • Z金豆: 47

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:
  • 注  册:2018-06-15
  • 登  录:2021-11-04
发表于 2019-09-12 09:35:41
电梯直达 确定
楼主

单片机编程使用 MDK时不可避免的要涉及到链接脚本文件在链接脚本中可以指定代码的存储布局,可以将代码段、只读数据段、可读写的数据段分别存放,可以精确地指定代码放置的位置。

在了解链接脚本之前需要了解以下概念:1RO(ReadOnly):表示程序中的指令和常量2RW(Read/Write):表示程序中已初始化的变量3ZI(Zero):表示程序中未初始化的变量4链接脚本,也叫程序加载文件,它决定在生成image文件时如何来分配相关数据的存放基址。

5镜像文件(Image),编译keil中的工程项目时生成的目标文件时叫做镜像文件(Image)bin文件,image文件中只包含RORW段,这是因为ZI数据段都是零,没有必要包含,只需要把ZI所在的区域清零即可。

  MDK链接程序使用了两种方式控制程序的链接,即链接控制命令选项和链接脚本文件。当使用链接控制命令选项时,链接器定义了6个段地址描述符。

6个描述符可以直接在程序中引用。而在使用链接脚本文件后,这6个描述符号没有了,取而代之的是链接脚本文件中的段描述符,格式为:Image段名bbse Image段名Limit。下面将结合具体的例子说明链接脚本文件的使用。

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

STAR 0x00000000 0x00040000;

//定义载入区域STAR 域基址:0x00000000,域大小为 0x00040000,对应实际 Flash //的大小

{

STAR _RO 0x00000000 0x00040000

//定义一个运行时域,第一个运行时域必须和加载时域起始地址相同,否则库不能加  //载到该时域的; 错误,其域大小一般也和加载时域大小相同。

*.o (RESET, +First)

// RESET 段最先加载到本域的起始地址外,即RESET 的起始地址为 0RESET 存储  //的是向量表

* (+RO) ;                 

//加载所有匹配目标文件的只读属性数据

}

STAR _RW 0x004000 ;

//可读写数据段STAR _RW紧接STAR _RO段的尾地址存放,即0x040000 + STAR _RO  //容量。

{

* (+RW);      

//加载所有匹配目标文件的可读写属性数据

}

STAR _ZI +0 ;   

//清零数据段STAR _ZI紧接STAR _RW段的尾地址存放。

{

* (+ZI) ;       

//所有清零数据都连续地放在这个区域。

}

}

上面例子中,载入区域和执行区域的名字是可以任意命名的。


weixin_38r2i...

weixin_38r2i235


精华

帖子

等  级:Lv.1
经  验:99
发表于 2019-09-20 09:16:33 1楼

KEIL是公司品牌吧,MDK、KEIL C51、KEIL C166、KEIL C251都是KEIL的产品吧

KEIL系列是基于uVision IDE支持各种微控制器开发工具,MDK即KEIL MDK、RealView MDK或者KEIL For ARM,ARM公司现在统一使用MDK-ARM的称呼,MDK的设备数据库中有很多厂商的芯片,是专为微控制器开发的工具,为满足基于MCU进行嵌入式软件开发的工程师需求而设计,支持ARM7,ARM9,Cortex-M3/M1,Cortex-R0/R4等ARM微控制器内核。


高级模式
星空(中国)精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表