一个很怪的全局变量问题(s3c2440)

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

定义成volatile,试试

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部