4. 低功耗复用功能

AD24N 支持 低功耗部分代码、变量与其他功能复用,从而节省空间。
默认SDK低功耗部分暂无与其他功能进行复用。
下面介绍如何把低功耗部分与解码部分的功能的进行复用,从而节省ram空间

4.1. 低功耗复用示例

该示例为低功耗与解码格式复用。
经测试,该示例在AD24N最多可节省1.8k空间。

4.1.1. 打开低功耗复用功能宏

在app_config.h 文件里打开TCFG_LOWPOWER_OVERLAY宏

"打开低功耗复用功能宏"

打开低功耗复用功能宏


4.1.2. 修改链接文件

  1. 打开app_ld.c文件,找到低功耗使用的ram空间

    如图为低功耗使用的ram空间暂时单独出来,并无与其他功能复用。

    "低功耗使用的ram空间"

    低功耗使用的ram空间

  2. 修改lowpower_overlay段位置,与目标功能复用

    如图为将原本低功耗使用的ram空间移入OVERLAY区域,并与解码格式进行复用。

    "低功耗复用解码功能"

    低功耗复用解码功能

  3. 调整cache_Lx_code_text_end位置

    "调整pc_limit范围"

    调整pc_limit范围

  4. 调整lowpower_overlay_begin位置

    该变量为低功耗从app.bin当中加载回低功耗代码地址

    "调整lowpower_overlay_begin位置"

    调整lowpower_overlay_begin位置


4.1.3. 修改应用层与低功耗复用的功能

当前示例中,低功耗与解码功能复用同一块ram空间,即两者功能 不能 同时执行。
常见的在音乐模式里,默认SDK是500ms的时候判断到当前没有在播放歌曲,就会进入powerdown当中。
当低功耗与解码复用后,如暂停音乐后,500ms消息判断到当前没有播放音乐,就会进入powerdown。
此时原本存储解码信息的ram空间被破坏用于了低功耗执行,等到退出低功耗后,解码功能需要重新执行初始化才可以使用。
通俗来讲:解码的暂停功能在进入低功耗后已失效,因为重新播放需要获取原本解码位置信息,但存储这些信息的ram空间都被破坏用于了低功耗使用。
下图把暂停功能改为关闭解码模块,避免退出低功耗后,继续使用暂停播放功能导致异常。
"修改音乐模式与低功耗复用的功能"

修改音乐模式与低功耗复用的功能

备注

用户若复用其他功能,需要注意复用的功能使用的RAM空间是否会被低功耗破坏,做好初始化或者其他规避手段。


4.1.4. 最终

编译,查看heap_buf空间多出空间大小。
修改前,剩余RAM空间为0x10af;
修改后,剩余RAM空间为0x17cf;
经对比,多出约1.8K空间;
(codeblock版本可以查看 logs & others 里的 build_log界面)
"修改前后的剩余RAM空间大小对比"

修改前后的剩余RAM空间大小对比