手机开发实战180——Scatter file介绍1

Scatter file是嵌入式系统开发中的关键文件,用于指定代码和数据在不同存储器区域的位置。它帮助解决复杂地址映射、多种存储器类型、函数定位、堆栈设置和内存映射IO等问题。例子展示了如何通过Scatter file进行简单和复杂内存映射,以优化代码在Flash、ROM、SDRAM和SRAM等存储器间的分布。

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

Scatter file介绍

Scatter file (分散加载描述文件)用于armlink的输入参数,它指定映像文件内部各区域的download与运行时位置。Armlink将会根据scatter file生成一些区域相关的符号,他们是全局的供用户建立运行时环境时使用。

(注意:当使用了scatter file 时将不会生成以下符号 Image$RW$Base, Image$RW$Limit, Image$RO$Base, Image$RO$Limit, Image$ZI$Base, and Image$ZI$Limit

什么时候使用scatter file

当然首要的条件是你在利用ADS进行项目开发,下面我们看看更具体的一些情况。

存在复杂的地址映射:例如代码和数据需要分开放在多个区域。

存在多种存储器类型:例如包含 Flash,ROM,SDRAM,快速SRAM。我们根据代码与数据的特性把他们放在不同的存储器中,比如中断处理部分放在快速SRAM内部来提高响应速度,而把不常用到的代码放到速度比较慢的Flash内。

函数的地址固定定位:可以利用Scatter file实现把某个函数放在固定地址,而不管其应用程序是否已经改变或重新编译。

利用符号确定堆与堆栈:

内存映射的IO:采用scatter file可以实现把某个数据段放在精确的地指处。
因此对于嵌入式系统来说scatter file是必不可少的,因为嵌入式系统采用了ROMRAM,和内存映射的IO

 

scatter file 实例
简单的内存映射
LOAD_ROM 0x0000 0x8000
{
       EXEC_ROM 0x0000 0x8000
       {
       *(+RO)
       }
      RAM 0x10000 0x6000
      {
       *(+RW, +ZI)
      }
}
 LOAD_ROM(
下载区域名称) 0x0000(下载区域起始地址) 0x8000(下载区域最大字节数)
{
        EXEC_ROM(
第一执行区域名称) 0x0000(第一执行区域起始地址) 0x8000(第一执行区域最大字节数)
       {
       *(+RO(
代码与只读数据))
       }
      RAM(
第二执行区域名称) 0x10000(第二执行区域起始地址) 0x6000(第二执行区域最大字节数)
      {
       *(+RW(
读写变量), +ZI(未初始化变量))
      }
}
复杂内存映射
LOAD_ROM_1 0x0000
{
       EXEC_ROM_1 0x0000
       {
        program1.o(+RO)
       }
      DRAM 0x18000 0x8000
      {
       program1.o (+RW, +ZI)
      }
}
LOAD_ROM_2 0x4000
{
       EXEC_ROM_2 0x4000
       {
       program2.o(+RO)
       }
       SRAM 0x8000 0x8000
      {
       program2.o (+RW, +ZI)
      }
}

LOAD_ROM_1 0x0000(
下载区域一起始地址)
{
       EXEC_ROM_1 0x0000(
第一执行区域开始地址)
       {
        program1.o(+RO) (program1.o
内的CodeRO data 放在第一执行区域)
       }
       DRAM 0x18000(
第二执行区域开始地址) 0x8000(第二执行区域最大字节数)
      {
       program1.o (+RW, +ZI) (program1.o
内的RW data ZI data 放在第二执行区域)
      }
}
LOAD_ROM_2 0x4000(
下载区域二起始地址)
{
       EXEC_ROM_2 0x4000
       {
       program2.o(+RO) (program2.o
内的CodeRO data 放在第一执行区域)
      }
      SRAM 0x8000 0x8000
      {
       program2.o (+RW, +ZI) (program2.o
内的RW data ZI data 放在第二执行区域)
      }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值