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