现象: 在程序中定义了较大的全局数组,导致程序能下载进去却无法正常运行。将数组减小又可以恢复正常。
原因是: 在main函数(关闭看门狗)之前,含有编译器添加的启动程序,程序启动后先初始化数组,结果超过了看门狗默认的间隔时间32ms,导致每次程序都无法正常运行。
解决办法:
方法一 将一些变量(主要是大全局数组)定义成 no init类型
方法二 修改IAR的cstartup.s43程序,具体方法如下:(iar310a为例)
1 将cstartup.s43程序加载到用户自己的项目中,cstartup.s43在iar310a的路径如下$TOOLKIT_DIR$srcLIB
2 修改cstartup.s43中的__program_start子程序,加入关闭看门狗的命令 MOV #0x5A80,&0x0120
3 在Project->Options->Linker->Config页中选择Override default programe ,并将Entry lib 设置成 __program_start