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并消除他们,这种修复耽误了真正的研究时间。

  • 相关阅读:
    每日一篇文献:Robotic pick-and-place of novel objects in clutter with multi-affordance grasping and cross-domain image matching
    每日一篇文献:Intuitive Bare-Hand Teleoperation of a Robotic Manipulator Using Virtual Reality and Leap Motion
    每日一篇文献:Virtual Kinesthetic Teaching for Bimanual Telemanipulation
    HEBI Robotic Arm VR Teleoperation
    「iQuotient Case」AR device teleoperated robotic arm
    VR and Digital Twin Based Teleoperation of Robotic Arm
    HEBI Robotic Arm VR Teleoperation
    Human Robot Interaction
    Immersive Teleoperation Project
    机器人演示学习
  • 原文地址:https://www.cnblogs.com/shuolang/p/5324824.html
Copyright © 2011-2022 走看看