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多字节

};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值