相信有不少朋友已经用上了 F1611,这个 RAM 大大的 MSP,呵呵.那就有可能会遇到 RAM中定义的变量/数组在超过一个极限的时候,MSP 程序不能正常运行的现象吧.一般初步判断,可以用I/O输出电平来确定程序进程.这样可以非常方便的知道该问题是由于WDT造成的,哈哈 (RAM的初始化时间大于 WDT 默认的 32MS 时间,因此 MSP 复位)
下面来看下解决的办法:
A 对你的数组用 __no init_ 定义,上电编译器不产生特殊的附加函数去初始化 RAM.
B 修改 IAR 中Cstartup.S43文件中__program_start 子程序,增加一个关闭 WDT 的操作或者设置 WDT时间长度超过32MS.
C 在Project--Options--Linker--Config中选择 Override default programe,并将 Entry lib 设置成 __program_start.
上述是已知解决 1611RAM 初始化时间超 WDT 默认而复位的解决方法,如果用汇编,则没有这个问题.
====================================================================================
__no init_ : Use the _ _no_init keyword to place a data object in non-volatile memory. This means that the initialization of the variable, for example at system startup, is suppressed.