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{
(RAWDATA0)
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Overlay RawData Buffer0 and SomeOverlay Function
}
LR_IROMX 0x0000F000 0x0000300 { ; load region size_region
HD_IROMX 0x20020000 OVERLAY {
(FuncInfoHead)
}
ER_IROMX 0x20021000 OVERLAY {
(+RO)
}
}
以上 文件中,RAM区域 0x20020000 ~ 0x200220 实现了OverLay机制。其中,初始化存在的是(RAWDATA0)的内容。
当需要 中的功能时候,则由软件将相应的 (FuncInfoHead) 、 (+RO) 复制到
对应的OverLay区域。 这样就可以在0x20020000 ~ 0x200220 访问到 的内容。