在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3510|回复: 24

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

[复制链接]
发表于 2019-9-16 14:17:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
       单片机编程使用 MDK时不可避免的要涉及到链接脚本文件。在链接脚本中可以指定代码的存储布局,可以将代码段、只读数据段、可读写的数据段分别存放,也可以精确地指定代码放置的位置。
       在了解链接脚本之前需要了解以下概念:
       1)RO(ReadOnly):表示程序中的指令和常量;
       2)RW(Read/Write):表示程序中已初始化的变量;
       3)ZI(Zero):表示程序中未初始化的变量;
       4)链接脚本,也叫程序加载文件,它决定在生成image文件时如何来分配相关数据的存放基址。
       5)镜像文件(Image),编译keil中的工程项目时生成的目标文件时叫做镜像文件(Image)或bin文件,image文件中只包含RO,RW段,这是因为ZI数据段都是零,没有必要包含,只需要把ZI所在的区域清零即可。
       MDK链接程序使用了两种方式控制程序的链接,即链接控制命令选项和链接脚本文件。当使用链接控制命令选项时,链接器定义了6个段地址描述符。
       这6个描述符可以直接在程序中引用。而在使用链接脚本文件后,这6个描述符号没有了,取而代之的是链接脚本文件中的段描述符,格式为:Image段名Base 和Image段名Limit。下面将结合具体的例子说明链接脚本文件的使用。
例: 一个加载区域,多个连续的执行区域。
STAR 0x00000000 0x00040000;
//定义载入区域STAR ,域基址:0x00000000,域大小为 0x00040000,对应实际 Flash  //的大小。
{
STAR _RO 0x00000000 0x00040000;
//定义一个运行时域,第一个运行时域必须和加载时域起始地址相同,否则库不能加  //载到该时域的; 错误,其域大小一般也和加载时域大小相同。
*.o (RESET, +First);
//将 RESET 段最先加载到本域的起始地址外,即RESET 的起始地址为 0,RESET 存储  //的是向量表。
* (+RO) ;                 
//加载所有匹配目标文件的只读属性数据
}
STAR _RW 0x004000 ;
//可读写数据段STAR _RW紧接STAR _RO段的尾地址存放,即0x040000 + STAR _RO的  //容量。
{
* (+RW);      
//加载所有匹配目标文件的可读写属性数据
}
STAR _ZI +0 ;   
//清零数据段STAR _ZI紧接STAR _RW段的尾地址存放。
{
* (+ZI) ;      
//所有清零数据都连续地放在这个区域。
}
}
上面例子中,载入区域和执行区域的名字是可以任意命名的。
发表于 2019-9-17 15:48:49 | 显示全部楼层
长见识了
头像被屏蔽
发表于 2019-9-17 17:04:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2019-9-17 22:01:30 来自手机 | 显示全部楼层
在链接脚本中指定代码的存储布局和精确地指定代码放置的位置这两个是一样的概念,没有说哪个会安全
 楼主| 发表于 2019-9-17 22:02:16 | 显示全部楼层
在链接脚本中指定代码的存储布局和精确地指定代码放置的位置这两个是一样的概念,没有说哪个会安全
发表于 2019-9-18 09:14:54 | 显示全部楼层
好复杂啊,学习了。有时间尝试验证一下看看效果。
发表于 2019-9-18 12:24:22 来自手机 | 显示全部楼层
文章写得很详细很具体,已经转发给我们的技术,后续仔细研究一下
发表于 2019-9-18 13:51:54 | 显示全部楼层
我弱弱的问一下楼主,文章中所说的链接脚本去哪儿下载呀?是通用版吗?还有对操作环境有要求没有啊?
发表于 2019-9-18 17:35:52 | 显示全部楼层
MDK链接程序使用两种方式控制程序的链接,但在实际运用过程中两种方式选择哪种更简便快速操作呢?
头像被屏蔽
发表于 2019-9-18 19:32:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-18 21:14 , Processed in 0.036334 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表