[STM32F1] while循环的条件已经为假还是跳不出循环,求教

[复制链接]
 楼主| hljjxzhla 发表于 2016-6-15 11:00 | 显示全部楼层 |阅读模式
我用定时器中断去修改全局变量TogEndflag,调试时在watch窗口也看见TogEndflag的值为1了,但是while(TogEndflag==0)这个循环就是跳不出去,死在里面了,这是为什么啊?
问题.JPG
tempchar 发表于 2016-6-15 11:02 | 显示全部楼层
变量定义加上volatile试试
sky.sun.zz 发表于 2016-6-15 11:02 | 显示全部楼层
你退出中断后把变量清零了。当然又进入循环了。

评论

我退出中断把变量置1了,我是在函数里等退出while循环才把变量从新置零,怎么会从新进入循环呢  发表于 2016-6-15 11:08
 楼主| hljjxzhla 发表于 2016-6-15 11:17 | 显示全部楼层
tempchar 发表于 2016-6-15 11:02
变量定义加上volatile试试

加了volatile果然跳出去了
Atom2004 发表于 2016-6-15 11:37 | 显示全部楼层
TogEndflag变量定义加上volatile就可以了。

在你进入循环的时候,实际上是将TogEndflag从内存加载到寄存器里面运行的,在整个循环中,TogEndflag这个变量都只是在读取寄存器里面的值。
当进入中断的时候,中断里面会从内存加载TogEndflag到寄存器,修改完之后又存到内存里,然后退出中断,再回到循环里面。但这个时候循环里使用的TogEndflag并没有重新从内存加载TogEndflag这个变量,所以一直都在循环里面。
而你在watch里面看到的TogEndflag变量,是通过调试接口读取对应的内存空间的,所以watch里面看到的值已经被修改了。
mmuuss586 发表于 2016-6-15 16:57 | 显示全部楼层
程序暂停下看看变量还是否为1,还是的话改语法结构;
Varus 发表于 2016-6-15 19:36 | 显示全部楼层
加了volatile果然跳出去了

这是为什么,volatile是什么作用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

72

帖子

1

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

6

主题

72

帖子

1

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