4. 低功耗复用功能
AD24N 支持 低功耗部分代码、变量与其他功能复用,从而节省空间。默认SDK低功耗部分暂无与其他功能进行复用。下面介绍如何把低功耗部分与解码部分的功能的进行复用,从而节省ram空间
4.1. 低功耗复用示例
该示例为低功耗与解码格式复用。经测试,该示例在AD24N最多可节省1.8k空间。
4.1.1. 打开低功耗复用功能宏
在app_config.h 文件里打开TCFG_LOWPOWER_OVERLAY宏
![]()
打开低功耗复用功能宏
4.1.2. 修改链接文件
打开app_ld.c文件,找到低功耗使用的ram空间
如图为低功耗使用的ram空间暂时单独出来,并无与其他功能复用。
![]()
低功耗使用的ram空间
修改lowpower_overlay段位置,与目标功能复用
如图为将原本低功耗使用的ram空间移入OVERLAY区域,并与解码格式进行复用。
![]()
低功耗复用解码功能
调整cache_Lx_code_text_end位置
![]()
调整pc_limit范围
- 调整lowpower_overlay_begin位置
该变量为低功耗从app.bin当中加载回低功耗代码地址
![]()
调整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空间大小对比