MSP430的內(nèi)存分配到底有多重要?
之前做的一個項目,本來插上仿真器運行程序沒一點兒問題,結(jié)果拔了仿真器后,斷電后再上電程序總是運行到報警的狀態(tài),首先,我懷疑是復(fù)位電路的問題,結(jié)果查了一下資料發(fā)現(xiàn)復(fù)位電路沒有問題,再說了,如果是復(fù)位電路的問題,那每次上電后都運行到超時報警的狀態(tài)好像也不太像是復(fù)位的問題吧!然后,用示波器觀察程序運行過程中系統(tǒng)電源的波形圖,結(jié)果發(fā)現(xiàn)有一瞬間電源電壓被急劇拉低 2.2V 左右。由于電路里面有兩個LDO電路,所以懷疑是LDO的使能信號開啟的時候負(fù)載過大引起電壓急劇下降導(dǎo)致單片機(jī)程序紊亂引起的,看起來好像所有的故障現(xiàn)象都指向這個問題了!那就多查查這方面資料吧!由于以前沒用過430的單片機(jī),所以很多東西不熟悉。在網(wǎng)上找到一個網(wǎng)友的一個帖子中說到SVS,然后仔細(xì)一看,覺得可以通過軟件來修復(fù)電壓劇變的問題,結(jié)果加上SVS的設(shè)置后程序依然出現(xiàn)報警情況。好在一個做軟件的同事指出程序中一個不完善的地方,在此為了說明問題就粘貼一部分代碼來說明吧! unsigned char *frame = (unsigned char *)malloc(((dsize/2)?dsizedsize+1))+7);
int len = 0;
len = Frame_form(frame,cmd,data,dsize);
Send_frame(frame,len);
free(frame);
本來定義的frame指針并沒有分配任何內(nèi)存,我還以為編譯器可以自動進(jìn)行內(nèi)存分配的,并且在插入仿真器的情況下程序也確實沒有什么問題,但是如果采用malloc分配內(nèi)存后,在拔下仿真器的情況下程序也正常了。雖然到現(xiàn)在為止我都沒想明白這是為什么,不過還是寫下我的第一篇博客來記錄一下!
====================================================================================
電源瞬間拉到2.2V是只在上電時發(fā)生,還是只在某一外設(shè)工作時發(fā)生,還是周期性的發(fā)生,在用電器件前加個大電容試試。