难度:★★★
本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。
想象一个场景。
你的芯片只有 32KB 的 RAM,但工程里有两个巨大的功能模块——一个负责网络通信,一个负责图形显示。每个模块的代码和数据各需要 24KB 的 RAM。
它们装不下。
但业务逻辑决定了:这两个模块永远不会同时运行。网络通信发生在设备启动时,图形显示在设备运行后才激活。
有没有办法,让这两块代码共用同一片 RAM?
有。这个机制叫OVERLAY。
今天这篇文章,就来拆开这个嵌入式系统里最古老也最精巧的内存复用技术。它早已超越了“省内存”的朴素动机,而是牵出了链接器在地址空间管理上最底层的抽象能力。
一、OVERLAY 解决什么问题?
问题:多个代码或数据块,在不同的时间阶段使用,但 RAM 装不下它们所有人。
解决方案听起来很简单:让它们在时间上轮流占用同一片 RAM。
就像一间房子,白班工人和夜班工人共用同一张床。他们永远不会同时在家,所以只需要一张床。
OVERLAY 就是这张“共享的床”。
在分散加载文件里,它的语法是这样:
SHARED_