D13x 分散加载使用指南
SDK 默认代码分布
D13x系列芯片SRAM大小为1MBytes,PSRAM大小为8MBytes。发布的SDK默认配置是:系统运行时,代码段、rodata段、data段加载到SRAM_S0,而BSS段位于PSRAM_CMA(可参考bsp/artinchip/sys/d13x/link_script/gcc_aic.ld.S)。在系统启动阶段,bootloader是加载到SRAM的最后256 KB空间执行的,如下图所示:

所以,加载到SRAM_S0的代码段、rodata段或data段不能超过768KB的大小,否则会覆盖bootloader,导致系统启动失败。
分散加载
在应用推广中,有的客户的代码量超过768KB,有的客户想把部分代码或数据放到PSRAM,为了实现不同的客户需求,在D13x中实现了分散加载功能。客户可以将代码段、rodata段、data段,或者是部分代码段或部分数据段加载到SRAM或PSRAM,由bootloader实现分散加载。
- 整段分散加载
如果要把整个代码段,或整个rodata段或data段放到PSRAM,只需要修改D13x的链接脚本(bsp/artinchip/sys/d13x/link_script/gcc_aic.ld.S),然后重新编译工程即可(不需要重编bootloader)。下面以将text段加载到PSRAM为例说明。
修改完成后,重新编译工程即可。将rodata段或data段加载到PSRAM方法与此相同。
- 部分分散加载
如果要把代码段或数据段的一部分放到PSRAM,其余代码段或数据段仍运行在SRAM_S0,则改动稍微复杂一些。
利用attr属性定义需要加载到PSRAM的代码所属的段,示例如下:
上述定义将 test_wavplay函数定义在.psram.code段内。
在链接脚本中添加如下的段描述,指定.psram.code段的链接地址
将.psram.code段加载到PSRAM_CMA
-
重新编译工程即可