微處理器復位方法:
硬件引腳RESET復位;
用看門狗復位;
程序控制復位。
軟件復位實現方法
首先聲明一個函數指針,指向復位後要開始執行指令的位置:
void (*app_start)(void) = 0x0000;
之後,在自己的程序中想復位的地方調用app_start();也就是跳到0x0000位置執行指令。
可以根據不同MCU復位的地址,修改上邊的地址(0x0000)。
實際上你可以跳到任何位置執行或調用相應指令或函數。
實例測試
老套路,發煙測試:以Arduino爲開發環境來測試。
注意:在AVR微處理器中,爲了使Arduino復位時不再進入引導區,使AVR將BOOTRST設置爲1。
使用函數指針進行軟件復位的代碼如下,你能想象到下邊的程序會使LED燈閃亮嗎?
// 0. 引腳定義
const int LED_PIN 13 // 定義LED引腳爲13號數據引腳(DIG13)
static void (*reset_this_CPU)(void) = 0x0000; // 復位本CPU函數指針
// 1. 初始化
void setup() {
pinMode(LED_PIN, OUTPUT); // 初始化D13爲輸出
digitalWrite(LED_PIN, HIGH); // D13輸出高電平
delay(1000); // 延時1秒
digitalWrite(LED_PIN, LOW); // D13輸出低電平
delay(1000); // 延時1秒
reset_this_CPU(); // 跳到0x0000地址指針,也就是復位
}
// 2. 循環
void loop() {
// 此處什麼也沒有啊!
}
結論
通過本方法,可以通過軟件方式進行復位,也可以用這個函數指針的方法調用任何函數。(實在不理解,請翻一下《微機原理》,謝謝。。。)
感謝一直關注着禾灮成長進步的朋友們。你們的信任、支持和鼓勵,鞭策着我們一路走到了今天。
感謝所有的合作伙伴,我們相互促進,共同見證了彼此的成長。
感謝所有曾經在禾灮彼此倚靠、相互鼓勵、攜手同心、砥礪同行的兄弟姐妹。這裏承載了我們的青春與熱血。
禾灮,感謝有你。
未來,我們將一如既往,砥礪前行。
禾灮·小楊
2018.08.06