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