之前做的一个项目,本来插上仿真器运行程序没一点儿问题,结果拔了仿真器后,断电后再上电程序总是运行到报警的状态,首先,我怀疑是复位电路的问题,结果查了一下资料发现复位电路没有问题,再说了,如果是复位电路的问题,那每次上电后都运行到超时报警的状态好像也不太像是复位的问题吧!然后,用示波器观察程序运行过程中系统电源的波形图,结果发现有一瞬间电源电压被急剧拉低2.2V左右。由于电路里面有两个LDO电路,所以怀疑是LDO的使能信号开启的时候负载过大引起电压急剧下降导致单片机程序紊乱引起的,看起来好像所有的故障现象都指向这个问题了!那就多查查这方面资料吧!由于以前没用过430的单片机,所以很多东西不熟悉。在网上找到一个网友的一个帖子中说到SVS,然后仔细一看,觉得可以通过软件来修复电压剧变的问题,结果加上SVS的设置后程序依然出现报警情况。好在一个做软件的同事指出程序中一个不完善的地方,在此为了说明问题就粘贴一部分代码来说明吧! unsigned char *frame = (unsigned char *)malloc(((dsize/2)?dsize:(dsize+1))+7);
int len = 0;
len = Frame_form(frame,cmd,data,dsize);
Send_frame(frame,len);
free(frame);
本来定义的frame指针并没有分配任何内存,我还以为编译器可以自动进行内存分配的,并且在插入仿真器的情况下程序也确实没有什么问题,但是如果采用malloc分配内存后,在拔下仿真器的情况下程序也正常了。虽然到现在为止我都没想明白这是为什么,不过还是写下我的第一篇博客来记录一下! |