智慧復位——程式控制MCU復位

abcjob發表於2021-09-09

圖片描述

微處理器復位方法:

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



作者:禾灮
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4798/viewspace-2816741/,如需轉載,請註明出處,否則將追究法律責任。

相關文章