zoukankan      html  css  js  c++  java
  • 软硬件调试九法:第四条规则 分而治之

    1、通过逐次逼近缩小搜索范围
            通过二分法,逐次缩小问题范围,在查找问题时,这个方法是唯一需要应用的规则,所有其它规则都是帮助你遵循这条规则。首先搜索前面1/2,如果有错,则再搜索前1/4,如果没错,则搜索范围就定在1/4-1/2之间,然后再次细分,几次之后就会找到问题。
     实际案例:有次程序运行反应很慢,特别是蜂鸣器响一次后,要几秒钟的时间,才能相应按键。因此就采用这个方法,很快确定慢是由等待蜂鸣器时间过长导致,从程序逻辑看,等待蜂鸣器结束函数并没有错误,但是其中while循环等待的蜂鸣器结束标志的变量,是在中断中处理的,该标志由于未定义为volatile类型,因此被编译器优化后,循环判断时只获取一次,所以只有循环延时超时退出时才结束。改为volatile类型后,问题解决。
    2、使用易于查看的测试模式
        在存储器读写测试、通讯数据偶尔失败测试时,发送00 55 AA FF或者1到100连续数据比使用随机数据更容易发现错误。在测试彩色显示屏颜色失真时,采用红绿蓝黄等色条比图片要容易发现问题。

         实际案例:有次使用TFT显示图片,黑白的显示正常,彩色的颜色失真,并且毛刺严重,以为显示屏有质量问题,使用彩色条后,发现显示和颜色和设定的不一致,仔细对比才发现驱动程序发出的16位数据,按照字节发送时,数据颠倒,所以调整后显示正常。

    3、从有问题的一端开始搜索
          不要从正确的一端开始确认,正确的太多了,因此需要从错误的一端开始,然后向上游查找。
    4、修复已知的bug
         有时我们很难相信一个系统有很多bug,这使得分而治之的隔离原则变得困难,因此如果确实查明了其中一个问题时,应该立即修复它,然后再查找其它问题。只有修复了已知的错误,才能集中精力查找其它问题,有时修复一个问题,另一问题也消失了,也就是两个问题时是一个bug。
    5、首先消除噪声干扰
        在硬件中,噪音也可能因此各种难以查找的间歇性问题,因此查找问题前,应该首先注意短时脉冲干扰、时钟回波、模拟信号噪声、时序波动等不稳定因素;
         在软件中,不合理的多线程、意外的冲入例程、未初始化的局部变量都会导致系统产生很多随机行为,为工作带来很多麻烦。
          另外,技术人员很容易成为完美主义者,为了达到高质量,把所有不好的设计都修复一遍,可能会因为前面一个程序编写的看起来不好的程序代码就删掉重写,但是如果没有引起实际问题,最好还是保留他们吧,不要太过极端,你的精力在于找到bug并消除他们,这种修复耽误了真正的研究时间。

  • 相关阅读:
    2011年需要关注的9大编程语言 狼人:
    微软在华推广Win7拒绝“黑屏” 狼人:
    ifanr访谈:GuruDigger — Web工程师排排坐 狼人:
    10种破除网页设计师障碍的实用方法 狼人:
    英特尔CEO:微软Windows 7是PC更新的催化剂 狼人:
    Windows 7市场份额突破25% XP持续下滑 狼人:
    Office Web Apps中文版正式上线 狼人:
    机器学习实现线性梯度算实现octave
    管理系统数据库sql server 数据库管理
    缓存代码sencha Touch 缓存问题解析
  • 原文地址:https://www.cnblogs.com/shuolang/p/5324824.html
Copyright © 2011-2022 走看看