(Keil教训:属性设置XDADA有时中断调用函数会出错)编程之难2:难在调试中大胆假设--排除软硬件开发平台错误!!

来源:互联网 发布:零信誉淘宝店铺出售 编辑:程序博客网 时间:2024/04/20 16:20
     正如生活之难一样,难的是适应环境而不是改变环境。编程之难难的不是编程。而是调试。调试之难难在排除各种复杂条件下的错误。软件硬件。。
    像单片机,这类软件硬件结合的产品。难就难在软硬结合。编写程序时,不能只是纯软件式的硬件无关性开发。尤其调试时,结合硬件的状况才能调试。
    调试老手,遇到过不少问题,甚至是一些很雷人的错误。对于那些嘴上说的一套一套的人来说。他怎么也不会碰到这些问题。而这也是差距。嘴上说的严丝合缝,在真的调试中,却不一定是那么回事。因为嘴上说的,不过是一套逻辑假设而已。既然是假设,就有条件,有条件就有不成立的情况。
    你碰到过没有,调试有时候遇到的问题,不是自己程序问题,而是一些其他雷人,气人,气炸肺的问题。但是,问题就是问题。在你发现他之前,他是未知的。排除这些气炸肺的问题,更需要调试之:大胆假设,仔细排除。
   比如说:你调试了几天,各种错误可能觉的都排到了。但还是没解决问题。你有没有换个角度思考。我有次改一个别人的程序。双单片机。之前的程序是能用的。后来要加一些小功能。功能主要加在主机上。从机只是改了一点接收响应。但是改完。调试怎么都不行。我反复更改程序。直到觉得不是程序问题。又怀疑开发平台KEIL有BUG,换了几个版本编译还是不行。最后没办法,只能怀孕硬件电路板问题。从电源供电不足开始怀疑。用指针万用表一量4.5V不到。以为找到了问题。换另一块板子试,也是一样。怀疑单片机电气性能下降。换单片机。问题依旧。捣鼓半天,别人跟你说,这个表有问题!!无语。。。。 换个表量,电压是正常的。这个过程折腾了好几天,都没解决。最后。我怀疑是程序问题:主从机程序不匹配。问人要了份原始程序。5分钟一改,解决了。原先给我的程序就给差了。。。。无语。。。。。这种假设,也属于我们调试范围。。。。。
今天调试,又碰到奇怪的问题。STC单片机明明串口发送接收数据都正确,但是写入EEPROM就是不行。由于是在中端函数中写EEPROM的,我开始怀疑是中断内不能写EEPROM,查了DATASHEET也没这个说明,由于程序比较大,有24k了。所以对部分功能,还是新建一个工程,单独测试这个问题。结果居然能写。于是,把原来的工程瘦身,逐渐删减测试,却还是不行。最后怀疑软件KEIL问题。比较设置,先是改了硬件设备选择。选成AT89C52,还是不行。只能怀疑变量存储模式问题。两个工程不同。终于发现改成数据RAM改成XDATA后,就不行了。原来问题在这,不是程序问题。可是工程里变量有几百个,必须要用XDATA。这可怎么办。后来想到以前写学习遥控器时,用外部RAM都是在程序里变量定义处 char xdata ......,工程属性这里不改成XDATA。于是大改,都加上XDADA。属性还是设置DATA。最后,终于能用了。问题解决。
    所以说:程序好改,难就难在夹杂了其他问题。只是动嘴,这些问题就不会出现。说和做还是两码事。尊重实践吧!!国人也最缺这个!!
在你用着自己焊的下载板,用STC这个破下载器,时不时的通讯失败,加上直接在成品板上用镊子翘单片机,调试。时而街上突然呼啸而过的汽车摩托车,还有外边鬼叫着吃夜宵,喷着不知道是不是人话。这种环境下,还保持一个冷静的头脑,排除这类气炸肺的问题。算不容易了。。爱动嘴的多动动手体验一下吧!!!!!!
原创粉丝点击