程序控制的軟件復位方法


微處理器復位方法:

  • 用硬件引腳RESET的復位方法;
  • 用看門狗的復位方法;
  • 自己程序控制的復位方法(本文方法,叫軟件復位)

軟件復位實現方法

  1. 首先聲明一個函數指針,指向復位后要開始執行指令的位置:
    void (*app_start)(void) = 0x0000;
    可以根據具體微處理器復位后的位置,修改后邊的地址。

  2. 之后,在自己的程序中想復位的地方調用app_start(); 也就是跳到0x0000位置執行指令。

  3. 可以根據不同微處理器復位的地址,修改上邊的地址(0x0000)。實現上你可以跳到任何位置執行,或調用函數執行。

實例測試

以下以Arduino為開發環境來測試。注意:在AVR微處理器中,為了使Arduino復位時不再進入引導區,使AVR設置BOOTRST設置為1。

使用函數指針復位方法如下,你能想象到下邊的程序會使LED燈閃亮嗎?

///0. 引腳定義
#define LED_PIN   13  //定義LED引腳為13號數據引腳(DIG13)
static void (*reset_this_CPU)(void) = 0x0000; // ***復位本CPU函數指針
///1. 初始化
void setup() {
  pinMode(LED_PIN, OUTPUT); // 初始化DIG13為輸出  
  digitalWrite(LED_PIN, HIGH); //DIG13輸出高電平
  delay(1000);                 //延時1秒
  digitalWrite(LED_PIN, LOW);  //DIG13輸出低電平
  delay(1000);                 //延時1秒  
  reset_this_CPU(); //***跳到0x0000地址指針,也就是復位
}
///2. 循環
void loop() {

   //此處什么也沒有啊!
}

結論

用本方法,可以用軟件方式進行復位,也可以用這個函數指針的方法調用任何函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM