1、质疑你的假设
你十分运行了正确的代码?电源插头是否已插好? 比如网络连接失败了,是不是你不小心把网线接头踢掉了?比如汽车无法启动,是否油箱没油了? 有时我们看到一个问题,通常在某个特定位置看到了正确的问题,但是导致这个问题的却在上游或者底层驱动上,只是系统不具备正确操作条件时,出现了奇怪的表现。
2、从头开始
是否正确的对内存进行了初始化?电源开关是否已经打开? 比如如果你的程序序需要初始化内存、全局变量、局部变量,而你又没有这么做,那么情况会很糟,它会让你自己测试时是运行正确的,到客户演示时就出错了。
3、对工具进行测试
编译器的参数设置是否正确?测量工具是否没电了?
实际案例:
- 在使用IAP引导程序时,应用程序的起始地址应该在编译器中正确设置,否则下载完成后无法运行。
- 在选择单片机时,型号要正确,假设你使用的MCU内存只有8K,编译时选择的MCU型号内存有16K,程序实际使用的内存为8.2K,编译不会报错,但是运行时,程序可能随机崩溃。
- 之前使用稳压源供电,电路板一上电就显示电流800mA,但是系统能运行起来,但是部分硬件出错,起初怀疑硬件有问题,后来发现是稳压源供电能力不足导致。
- 工具本身也有bug, 比如编译器,因为其也是工程师设计的,为什么它比你的软件更值得信任呢?Keil编译器本身也有bug,之前使用Keil C51时,其中一个bug使会过滤程序中的汉字内码中的“0xFD”,导致程序出错,在使用点阵汉字显示时,我是实际遇到并必须使用国内网友提供的bug补丁才解决的!