KEIL MDK链接脚本详解

本文详细介绍了KEIL MDK链接脚本中的重要概念,包括RO、RW和ZI段,以及在编译工程时生成的image文件如何包含不同数据段。重点解析了链接脚本的作用,它是决定程序数据存放基址的关键,并探讨了分散加载文件的结构,包括加载时域和运行时域的格式。通过实例说明了链接脚本在程序加载过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在了解keil的链接脚本之前需要了解几个重要概念:

  • RO(ReadOnly):表示程序中的指令和常量
  • RW(Read/Write):表示程序中已初始化的变量
  • ZI(Zero):表示程序中未初始化的变量

我们在编译keil中的工程项目时生成的目标文件时叫做镜像文件(Image)或bin文件,image文件中只包含RO,RW段,这是因为ZI数据段都是零,没有必要包含,只需要把ZI所在的区域清零即可。而其他两个数据段是被赋值了的,所以image文件需要包含已初始化变量的初值。如果我们将image文件烧录到ROM中,那么其必须包含有将RW段移动到RAM中以及将ZI段所在的地址清零的功能。这是保证烧录程序能运行起来的基本要求。
           知道基本的定义后,我们来了解链接脚本,也叫程序加载文件。在生成image文件时如何来分配相关数据的存放基址呢?这个就有链接脚本决定,如果不指定特定的链接脚本,连接器就会自动采用默认的链接脚本来生成镜像。本文主要讲解分散加载文件:分散加载文件主要由一个加载时域,多个运行时域组成。
加载时域格式如下所示:

load_region_name base_address max_size
{
     execution_region_description+
}
  • load_region_name为加载时域的名字,长度不超过31个字节
  • base_address为加载时域的起始地址,即从该地址开始加载相关代码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值