|
在單片機(jī)系統(tǒng)中 , 我們經(jīng)常用硬狗復(fù)位MCU。程序經(jīng)常這樣寫:
data unsigned char bootflag;
if(bootflag!=0xaa) { /* 冷啟動(dòng)代碼 */ } else { /* 熱啟動(dòng)代碼 */ }
最近做了一個(gè)東東,發(fā)現(xiàn)即使系統(tǒng)冷啟動(dòng),bootflag仍為0xaa。 所以希望各位兄第做東西時(shí),如果用到硬狗,程序中至少要用2個(gè)啟動(dòng)檢查變量,來查看 是冷啟動(dòng),還是熱復(fù)位。 如果程序的RAM比較緊張,或者你就想用一個(gè)字節(jié)變量做標(biāo)志,可以在else中這樣寫: else { /* 根據(jù)系統(tǒng)用到的變量在運(yùn)行時(shí)的值初始化系統(tǒng) */ if(run_var==VAR_DEF_1) { /* 初始化1 */ } else if(run_var==VAR_DEF_2) { /* 初始化2 */ } else { bootflag=0x55; soft_dog(); } while(1) { /* 實(shí)際的程序代碼 */ }
}
需要注意的是,單片機(jī)被硬狗復(fù)位后,外部端口和SFR將還原成默認(rèn)狀態(tài)。所以有些SFR 還需要在else中重新初始化。
|