一次DEBUG经历
来源:互联网 发布:pg数据库与oracle区别 编辑:程序博客网 时间:2024/05/16 18:00
不久前在项目中遇到一个BUG,解决的过程不算复杂,但能说明一些问题。
项目背景:
在项目中我负责的保全模块中(这个以后也写写),当用户开关保全以及设定条件被触发时使用音频解码通道播放一段G726格式音频。
相关硬件:HI3510 ,WM8731 相关软件:音频解码播放代码,WM8731 driver
问题描述:测试人员发现有时会出现无声现象。
解决过程:
1.怀疑编码不当导致解码通道操作错误,检查代码后排除。
2.仔细观察问题发生状况,发现问题有如下特点,如果该板在启动后无声,则一直无声,而如果启动时声音正常则运行过程中不会出现无声现象。初步定位到系统初始化阶段。
3.检查应用程序初始化过程,无果,怀疑DRIVER出现问题。
4.用示波器观察HI3510 I2S输出通道,发现在有声和无声的情况下I2S总线上均有正常数据,怀疑驱动有时将WM8731初始化为静音,询问驱动开发人员得知静音接口未暴露给应用层,猜测错误。
5.因为I2S数据一直正确,可以判定应用层音频解码无误,问题出在DRIVER,但编写驱动的同事较忙,而WM8731驱动并不复杂,索性自己检查。
6.仔细检查驱动代码,并无逻辑错误,仔细阅读DATASHEET,在一个不起眼的地方有如下一句:
it is recommendded that between changing any content of Digital Audio Interface or Sampling Control Register that the active bit is reset then set
对照驱动代码,正好忽略了这一点,而系统的驱动恰恰加载了两次,才造成了音频接口出错出现无声,在设置sample rate 的地方关掉接口然后再打开,一切OK。
结论:一个59页的DATASHEET,被忽略了的两行造就了这个BUG,在万事俱备的情况下,细节决定成败。为了避免这样的隐患,在做的过程中尽量细心,不放过任何一个细节,。
- 一次DEBUG经历
- 一次多线程debug经历
- 一次随机crash的debug经历
- 记一次debug经历,基础的重要性
- 用DELL的一次DEBUG惨痛经历(两天啊)
- 软件测试(一) 近期的一次debug的经历
- 一次面试经历
- 一次面试经历
- 一次emacs调试经历
- 经历的一次诈骗
- 一次排错经历
- 一次全站挂马的经历
- 一次百度面试经历
- 一次C++笔试经历
- 一次死锁追踪经历
- 一次面试经历
- 一次死锁追踪经历
- 记一次面试经历
- 干了活还受气该怎么办?(杜拉拉升职记)
- 您可能不知道的.Net2.0小技巧
- windows日志对应出错表
- 狮心王
- Misrosoft Enterprise Lib操作
- 一次DEBUG经历
- SQL SERVER 与ACCESS、EXCEL之间的数据转换
- 如何在asp.net中如何在线播放视频文件
- The simplest Singleton
- jquery取DropDownList下拉列表框选定项的值
- HTML字符实体(Character Entities),转义字符串(Escape Sequence)
- 谷歌vs百度,谁更黄
- J2ME环境配置笔记
- 说说:在ASP.NET应用程序中上传文件