问题:卫星电视遥控板按钮经常按了没反应
接收红外码后编辑发送红外码,红外码会出现接收/发送时的错误
一:红外波形分析
通过逻辑分析仪接KingSt VIS软件抓取红外码波形,分析发现部分红外的脉宽明显高于560us(硬件要求的指标),猜测可能是CPU占用过高引起
二:验证CPU影响
验证将cpu占用过高的app关掉,抓取红外码出错率从10/30,降低到了2/30,验证有效但是解决方法不彻底
三:解决方法
将收发程序的优先级设置到最高,收发红外码识别率大幅提升,几乎100%
四:CPU使用率降低
4.1查看app在camera预览页面CPU使用率200%左右,接近两个核
adb shell top -d 1
4.2退出预览页面,无任何操作情况下查看app的占用率仍然在150%左右,判断系常驻任务导致的
4.3查看代码,发现有常驻任务读取GPIO口数值用于旋钮调音,屏蔽后CPU使用率一下降低到了10%左右
4.4 解决方案,将读取GPIO口数值的方法改为读取一次线程sleep 20ms,CPU使用率降低到了70%
常用命令:
查看资源使用 adb shell top -d 1
查看程序 ps -A | grep ir_
结束程序 kill -9 497
结束GPIO端口占用 echo 36 > /sys/class/gpio/unexport
过滤日志 logcat | grep IR
五: 细化查看一个app的线程及对应的cpu占用
查看app所在的pid
ps -A | grep com.hn.szjcyy
查看对应pid下的线程对资源的占用情况
top -H -p 21027