OverLay 原理与实现

xiaoxiao2021-02-27  181

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  的内容。

转载请注明原文地址: https://www.6miu.com/read-11663.html

最新回复(0)