智能復位——程序控制MCU復位


微處理器復位方法:

硬件引腳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

發佈了35 篇原創文章 · 獲贊 82 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章