转自:http://blog.sina.com.cn/s/blog_7880d3350101oozo.html
TI技术论坛一个员工这么说的:
一直在_data16_memzero里死循环可能是因为程序最开始初始化变量的时候有大数组需要初始化。导致看门狗不断复位。这个初始化的过程是在进入main之前,有2种方式你可以尝试:
1.对你的数组用 __no init_定义,上电编译器不产生特殊的附加函数去初始化RAM
2. B修改IAR中Cstartup.S43文件中__program_start子程序,增加一个关闭WDT的操作或者设置WDT时间长度超过32MS
C在Project--Options--Linker--Config中选择 Override default programe,并将Entry lib 设置成__program_start
事实也确实如此,Cstartup.S43是MSP430的启动文件,里面默认是打开看门狗的,添加个宏定义把看门狗关闭就解决了问题。
具体操作如下:
在安装文件:C:\……\src\lib\430 中找到启动文件:cstartup.s43
拷一个cstartup.s43,然后将其只读属性去掉。用记事本等打开cstartup.s43文件,看到文件内有如下语句:
#ifdef DISABLE_WATCHDOG
#endif
说明文件内已经有关闭看门狗的条件编译语句,只要我们定义条件,这样启动代码中的该语句就生效了,我们在文件头添加一句:
#define DISABLE_WATCHDOG
保存,然后再工程中将cstartup.s43文件添加到我们的工程当中。
在Project->Options->Linker->Config页中选择Override default programe ,并将Entry symb 设置成__program_start。
把debugger->setup->Run to main销掉,这样我们就能够从启动代码开始一句一句的看了。
cstartup.s43在iar310a的路径如下$TOOLKIT_DIR$\src\LIB\
参考:
http://www.deyisupport.com/question_answer/microcontrollers/msp430/f/55/p/20519/68840.aspx
http://blog.sina.com.cn/s/blog_4c0cb1c001013k4x.html
http://zhidao.baidu.com/link?url=D8bFWuJgYrbaFYA-x8Ni9MSQtuUkqe_OX55VMHaFb5GTDeE7fNRb_8Gus4iipUL3kYcw23Cuqxrqm