MSP430 大型數組 上電不啓動

現象:程序燒錄板子後,單片機不啓動,卡死。註釋掉部分字節數組後,才能運行。

分析:
          這是IAR編譯的方法,導致看門狗溢出了。MSP430單片機一上電看門狗就已經啓動,但是在進入main()函數之前,軟件會先初始化用到的一些數據,比如數組。如果數定義的比較大,初始化時間比較長,那就有可能導致看門狗溢出了,單片機復位,然後重啓,再初始化,再溢出,再復位..程序永遠也進不去主函數。

解決方法:

          使用低級初始化函數:int __low_level_init(void)  。該函數會自動把低級初始化函數放在程序的最開始處,在此可以關閉看門狗,等低級初始化函數執行完之後,纔會進行數據初始化,最後再進入main()函數。

void main()
{

}

int __low_level_init(void)  
{  
  WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT  
  /* Insert your low-level initializations here */ 

  /*  
   * Return value:  
   *  
   *  1 - Perform data segment initialization.  
   *  0 - Skip data segment initialization.  
   */ 

  return 1;  


也不用調用該函數,編譯器自動將其放在最開始處。
當然也可以把所有硬件初始化函數寫進來,這樣在進入main函數之前,把硬件都準備好了,避免了其他bug產生。

__no_init unsigned char  all_25665[] ={

//4K多字節

};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章