This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430初始化大量数据时跑飞的问题

Other Parts Discussed in Thread: MSP430F5438A

    我最近在用MSP430F5438A写一个fft(快速傅立叶)算法时,发时程序无法时行调试也无法进入中断。在TI的外国论坛上看到原因大概是因为文件中有大量的待初始化数据,在完成数据初始化之前,看门狗不会关闭,当数据初始化用时过多时会因为看门狗复位使程序无法正常运行。据说要在初始化数据之前调用 __system_pre_init() ,但鄙人英文不太好,不知道具体的该如何。希望 大家给予解惑,谢谢!

  • 你这个问题我之前遇到过,我当时是这么解决的:把需要初始化的数组和变量先定义成 __no_init 类型的,然后在主程序里初始化这些数组和变量,这样就不会出现这个问题了。

  • 这样定义吗:__no_init dat[256];

    编译出错说什么定义这个类型。具休怎么用,举个例子吧,谢了!

  • Qingcui Lu,

    将下列代码放在main函数之前即可。你先试试。会在初始化数据之前,会先进入下列函数将看门狗关掉。

    #include <intrinsics.h>
    #include "msp430.h"

    int _system_pre_init(void)
    {
    /* Insert your low-level initializations here */

    /* Disable Watchdog timer to prevent reset during */
    /* long variable initialization sequences. */
    WDTCTL = WDTPW | WDTHOLD;

    /*==================================*/
    /* Choose if segment initialization */
    /* should be done or not. */
    /* Return: 0 to omit initialization */
    /* 1 to run initialization */
    /*==================================*/
    return 1;
    }

  • 上述代码是用于CCS的,若为IAR,则为:

    // global variable for storing the reset cause
    __no_init unsigned int SysRstIv;
     
    int __low_level_init(void)
    {
      // stop WDT
      WDTCTL = WDTPW + WDTHOLD;
     
      // Perform data segment initialization
      return 1;
    }
  • 确实是这样,非常感谢!