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

单片机编程使用 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) ;       

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

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
Keil MDK是一款广泛使用的嵌入式开发工具,它提供了一系列常用的脚本来帮助开发人员进行嵌入式软件开发。以下是一些常用的Keil MDK脚本介绍: 1. 编译脚本Keil MDK提供了一套编译脚本,可以根据用户的需求来自定义编译选项、链接选项等,方便编译和构建项目。用户可以通过修改脚本文件来修改编译器的参数,以满足自己的需求。 2. 调试脚本Keil MDK提供了一系列调试脚本,可以帮助开发人员对嵌入式设备进行调试和测试。这些脚本可以用来控制设备的复位、下载程序、设置断点、查看寄存器状态等,方便开发人员进行调试工作。 3. 代码生成脚本Keil MDK还提供了一些代码生成的脚本,可以自动生成一些常用的代码模板,例如断向量表、启动代码等。这些脚本可以减少手动编写代码的工作量,提高开发效率。 4. 测试脚本Keil MDK还支持使用脚本进行自动化测试。开发人员可以编写测试脚本来对嵌入式软件进行自动化测试,例如输入一组测试数据,然后执行相关的测试程序,最后输出测试结果,以验证软件的正确性和可靠性。 5. 项目管理脚本Keil MDK提供了一套项目管理脚本,可以帮助开发人员管理项目的各种配置和设置。这些脚本可以用来创建新项目、导入外部资源、配置编译选项、添加文件等,方便开发人员进行项目管理和维护。 综上所述,Keil MDK提供了一系列常用的脚本来辅助嵌入式软件开发,包括编译脚本、调试脚本、代码生成脚本、测试脚本和项目管理脚本等。这些脚本可以提高开发效率,减少开发工作量,并且可以根据用户的需求进行定制和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值