问题场景:使用查表法线性拟合计算温度(热敏电阻)
出现情况:程序不运行,无法仿真
一开始初步怀疑是自己的数组定义过程中出现问题,屏蔽放在xdata的数组,程序正常运行。
然后留下一个放在xdata的数组,程序正常运行。(大写的黑人问号?)
暂时找不出原因,只能去百度,看到有人提到了可能是看门狗的问题导致的无限复位。
转头去看了一下手册,里面有这样一句话
“WDT 在任何一次系统复位之后都被设置为使能状态。PCA0 计数器的缺省时钟为系统时钟的十二分频(SYSCLK/12)。PCA0L 和 PCA0CPL2 的缺省值均为0x00,因此 WDT 的超时间隔为 256 个系统时钟。表 23.3 列出了对应某些典型系统时钟频率的超时间隔。”
“系统时钟(Hz ) PCA0CPL2 超时间隔(ms ) 24,500,000 255 32.1”这也就是说,如果初始化时间过长,超过看门狗的上电默认复位时间,会导致程序无法进入main函数,我在main函数中关闭看门狗的指令自然失效,程序不停的被狗复位。
我用了个很蠢的方法,只定义了数组,不赋值初始化,然后使用一个函数进行赋值,程序正常运行。
/* ...........省略一部分 */
uint xdata RT_table[13];
void RT_GET_VALUE()
{
RT_table[0]=0x8354;
RT_table[1]=............
}
|