杰理692X RAM内存管理overlay机制

调试过一些国产蓝牙比如建荣的,杰理的,炬芯的朋友可能都知道,调这些案子最让人闹心的不是功能有多复杂,而是“空间爆了”。在之前公司工作,办公室里听到软件工程师同事抱怨最多的也是一句“空间爆了”。我有幸调过炬力,建荣,这些蓝牙方案,对空间内存这块还算是比较了解,现在搞杰理这块,对杰理692X系列的空间分配进行一番研究以及记录。

首先要了解一颗芯片的ram内存空间,必须查看的就是内存分配链接脚本了。692X系列的链接脚本在flash文件夹里边的sdk.ld文件。打开这个文件看看吧:杰理692X RAM内存管理overlay机制

首先看到这个芯片有128K的ram,我们最要关注的是其中的sdk ram,这是用户空间,换句话说是我们可以自己分配的,剩下的一些中断向量入口,更新区,保留区等我们不用关心因为我们也改不到。

接下来看ram0,次重点,空间为68k-0x200,这就是平常我们用到的全局变量,静态变量,const表等存放的地方,这个看似有68K但是应为蓝牙库  解码库 ble等用了不少,所以剩下给我们用的空间的不多了。

接下去是overlay空间,我所要讲的重点,因为我们挤空间,就从这里挤出来的。overlay分为overlay task和overlay ram0,overlay task只有8K多一点点空间,起始地址是68K位置,别小看这8K空间,因为如果知道这8K空间用在哪里,调的案子可能就多出8K空间给你用了。接下去看脚本:杰理692X RAM内存管理overlay机制如果你看不懂脚本没关系,看上面截图中> overlay_task,他的意思是把上面的这些段分配到这个overlay_task空间里,这里的段有tws段,(未完)