Edit online

D13x 分散加载使用指南

SDK 默认代码分布

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

../../../images/sram_s0.png

所以,加载到 S0 的代码段、rodata 段或 data 段不能超过 768KB 的大小,否则会覆盖 bootloader,导致系统启动失败。

分散加载

在应用推广中,有的客户的代码量超过 768KB,有的客户想把部分代码或数据放到 PSRAM,为了实现不同的客户需求,在 x 中实现了分散加载功能。客户可以将代码段、rodata 段、data 段,或者是部分代码段或部分数据段加载到 SRAM 或 PSRAM,由 bootloader 实现分散加载。
  1. 整段分散加载

    如果要把整个代码段,或整个 rodata 段或 data 段放到 PSRAM,只需要修改 x 的链接脚本(bsp/artinchip/sys/d13x/link_script/gcc_aic.ld.S),然后重新编译工程即可(不需要重编 bootloader)。下面以将 text 段加载到 PSRAM 为例说明。

    ../../../images/text_psram.png

    修改完成后,重新编译工程即可。将 rodata 段或 data 段加载到 PSRAM 方法与此相同。

  2. 部分分散加载

    如果要把代码段或数据段的一部分放到 PSRAM,其余代码段或数据段仍运行在 S0,则改动稍微复杂一些。

    1. 利用 attr 属性定义需要加载到 PSRAM 的代码所属的段,示例如下:

      ../../../images/attr.png

      上述定义将 test_wavplay 函数定义在.psram.code 段内。

    2. 在链接脚本中添加如下的段描述,指定.psram.code 段的链接地址

      ../../../images/psram_code.png

      将.psram.code 段加载到 PSRAM_CMA

    3. 重新编译工程即可