两个文件:定时器函数文件A,应用文件B 定时器0设置为每秒中断。 在应用文件中定义了一个全局变量BOOL型的FLAG。在定时器文件中extern声明。 定时器A文件: extern bool flag; static void __irq ISR_Timer0(void) { if(sec_time_auto==0) { flag=0; } if(flag) { Show_TimeCutdown(Countdown_Hour,Countdown_Min,Countdown_Sec); } sec_time_auto--; } 应用B文件: bool flag; test() { sec_time_auto=10; flag=1; while(sec_time_auto>0) { idx=getkey(); if(idx==Key_Enter) //按ENTER键返回1-2 { flag=0; break; } } }
当flag=1的时候显示。flag=0的时候不显示。 当倒计时没有到0的时候,我按下ENTER键,按道理应该flag=0,显示停止。但实际上flag并没有=0,而是一个错误的大于0的值,显示并没有停止。只有当倒计时走完,sec_time_auto=0后,flag才等于0。
但当我把FLAG定义在定时器文件中,而在应用文件中extern的话,FLAG的值却没有发生错误。 请问:是什么原因呢?谢谢! |