OverLay 原理与实现

Overlay技术:

分类: 大体分为软件Overlay   硬件 

本文主要介绍 软件实现OVERLAY。至于硬件实现的方式或者说策略,目前能找到的资源有限,且自己还没有弄清楚,所以当前情况下暂不介绍。

所谓OVERLAY 即 实现 内存区域的重复利用。RAM在SOC上,是一个快速但单位面积较大的组件,而单位面积较大代表成本较高。有一个降低成本的方法,是将程序代码放在较慢但单位面积较小的flash或ROM上,当系统需要执行里面的某些程序代码时,才加载到内存里执行。

Overlay区域可是放置 RW Data 也可以是 RO Data。  

需要注意的前提是:
1、模块A 和 模块B 不同时存在使用的可能。

2、当要替换掉 OVERLAY 区域内的数据时,若有必要,请软件实现保存。

3、实现OVERLAY的RW 、RO 应当是位置无关的。

4、OVERLAY的相关区域的移动保存由软件负责实现。

下面以ARM M系列的 sct文件进行说明:

LR_IROM1 0x00000000 0x0000F000  {    ; load region size_region
  ER_IROM1 0x00000000 0x00000200 {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
  }
  ER_IROM2 +0 0x0000EE00 {
  .ANY (+RO)
  }
  RW_IRAM1 0x20010000 0x00003FF0  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x20013FF0 UNINIT 0x00000010  {
   .ANY (+RW +ZI)
  }
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Overlay RawData Buffer0 and SomeOverlay Function
  RW_OVELAY_RAW0 0x20020000  OVERLAY 0x2000{
    touchdataprocesslib.o(RAWDATA0)
  }
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Overlay RawData Buffer0 and SomeOverlay Function
}

LR_IROMX 0x0000F000 0x0000300  {    ; load region size_region
    HD_IROMX 0x20020000  OVERLAY  {    
    OverLayFunc.o  (FuncInfoHead)
  }
    ER_IROMX 0x20021000  OVERLAY  {
    OverLayFunc.o  (+RO)
  }
}

以上 文件中,RAM区域 0x20020000  ~  0x200220 实现了OverLay机制。其中,初始化存在的是touchdataprocesslib.o(RAWDATA0)的内容。

当需要OverLayFunc.o 中的功能时候,则由软件将相应的 OverLayFunc.o  (FuncInfoHead) 、 OverLayFunc.o  (+RO) 复制到

对应的OverLay区域。 这样就可以在0x20020000  ~  0x200220 访问到OverLayFunc.o  的内容。

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值