问题背景硬件:r128 软件:freertos + rtplayer_test(cedarx)+ audiosystem
问题复现复现步骤:
1.rtplayer_test /data/boot.mp3
2.串口输入l, 循环播放
3.串口输入b , 播放器后台执行
具体表现rtplayer_test 循环播放老化音频十几分钟后,音乐停止播放,报错如下:
问题分析1.根据上面报错的log,播放停止时,系统内存不足;在老化过程中出现的内存不足,一般是某处存在内存泄漏
2.reboot重启,重新执行老化播放流程,串口执行free命令,观察内存的剩余情况:
首次播放时的内存:
c906 >free== > round [1] free== > round [1] system components - > aw components - > memleak components support [*] tina rtos memleak # 使能内存泄露分析工具 (16) tina rtos memleak backtrace level # 内存泄露分析栈回溯层数 [] tina rtos double free checkmemleak用法如下
作用:内存泄露分析
用法:memleak 1 使能内存泄露分析,记录所有内存块申请、释放信息
memleak 0 关闭内存泄露分析,删除所有内存块的申请、释放信息
memleak 1 thread_name1 thread_name2 使能内存泄露分析,记录指定任务的内存块申请、释放信息
串口执行memleak 1
音频老化测试(参考复现步骤),音频播放几次后,执行rtpc q 命令退出播放
串口执行memleak 0
关闭内存泄露检测时,会打印可疑的内存泄露点及其回溯信息;
有两个地方:
007: ptr = 0x08760960, size = 0x00000f00, thread = audiorender backtrace : 0x08336aee backtrace : 0x08336b46 backtrace : 0x08396d52 backtrace : 0x084b025e backtrace : 0x08446856 backtrace : 0x084496c6 008: ptr = 0x0875f990, size = 0x00000f00, thread = audiorender backtrace : 0x08336aee backtrace : 0x08336b46 backtrace : 0x0839757e backtrace : 0x084b025e backtrace : 0x08446856 backtrace : 0x084496c6callstack 回溯
pvportmalloc at /workspace/freertos/r128/test_0624_rtplayer/rtos-dev/lichee/rtos/kernel/freertos-orig/source/portable/memmang/heap_4.c:658pvportcalloc at /workspace/freertos/r128/test_0624_rtplayer/rtos-dev/lichee/rtos/kernel/freertos-orig/source/portable/memmang/heap_4.c:577softvol_ap_update_mode at /workspace/freertos/r128/test_0624_rtplayer/rtos-dev/lichee/rtos/components/common/aw/audiosystem/audio_plugin/softvolume.c:250_audiotrackstart at //workspace/rtos-r128/lichee/rtos/components/common/aw/audiosystem/audiotrack.c:163rtsounddevicestart at /workspace/codec_lib/cedarx_rtos/temp/rtos_cedarx/cedarx/rtos_out/libcore/playback/src/rtossoundcontrol.c:766startsounddevice at /workspace/codec_lib/cedarx_rtos/temp/rtos_cedarx/cedarx/rtos_out/libcore/playback/src/audiorendercomponent.c:800 (inlined by) dorender at /workspace/codec_lib/cedarx_rtos/temp/rtos_cedarx/cedarx/rtos_out/libcore/playback/src/audiorendercomponent.c:942 (inlined by) dorender at /workspace/codec_lib/cedarx_rtos/temp/rtos_cedarx/cedarx/rtos_out/libcore/playback/src/audiorendercomponent.c:898通过回溯信息,发现在resample_ap_update_mode处产生了内存泄漏。
根本原因播放器老化过程中,只调用audiotrackcreate一次,循环播放时会多次调用_audiotrackstart,最后退出播放才调用audiotrackdestroy销毁;所以softvol_ap_update_mode这里,老化过程会多次调用到,会有多次分配,但只在退出时audiotrackdestroy里才销毁。
解决方法只在audiotrackcreatewithstream时创建一次,audiotrackdestroy,测试10小时左右未出现内存泄漏
交通信号控制系统逻辑电路设计
世强签约德国著名功率模块供应商VINCOTECH
索尔维携电池组和浸入式冷却应用材料亮相2019中国电池展
中国联通:已开通5G基站33.2万 明年5G覆盖县城
无人机会不会成为未来急救的主力军
全志R128内存泄漏调试案例分享
使用线性反馈移位寄存器生成伪随机数
基于ISP1581芯片实现USB接口的应用设计
四大浏览器续航对决,结果Chrome浏览器完胜
Apple Watch3最新消息:移动网络版Apple Watch即将推出 英特尔提供芯片
为什么华为服务器发货量增长率全球第一?
Oppo通过一款名为Oppo A93 5G的新型中端手机
HTC那些年:豪赌安卓大获成功,却在VR中逐渐消沉
区块链资产交易与贸易平台DARB Finance介绍
ADS应用技巧—ADS的变量扫描
新唐科技N9H 系列介绍
长安CS55这车或8万多,外观甩博越、H6十条街,就等此车上市了!
【泰有聊】之“为工程师而生”系列:泰克是硅林的种子
华为mate40怎么升级为鸿蒙系统 华为mate40迎来重要补丁
声控彩灯控制器电路图