本来是要做watchdog 中断实验的,但是遇到问题,把代码阉割了,但是还是未能解决问题,
我把代码 简化成:
主程序代码:
static int flag=0;
void WAT_Handl()
{
if(flag==0)
{
led_on();
flag=1;
wait(300000);
}
else
{
led_off();
flag=0;
wait(300000);
}
}
void disable_watchdog()
{
WTCON = 0;
}
int main(void)
{
led_init();
disable_watchdog();
while(1)
{
WAT_Handl();
}
return 0;
}
------解决方案--------------------
int volatile flag = 0;
不是这样写的,这样才对:volatile int flag = 0;
你应该把wait函数贴出来,在循环等待的时候要注意编译器会优化没有volatile 标示的变量,导致你的循环不起作用,这个很重要。估计你wait的那个变量没有添加volatile
而你这边的flag变量就没必要使用volatile进行标示,可以使用static限定在本文件中使用