小ω 发表于 2014-7-30 14:27:51

【ST MCU实战经验】之跳不出的 while 循环

该问题由某客户提出,发生在 STM32F103VBT6 器件上。据其工程师讲述:在为 STM32 调试软件过程中,遇到了一个怪现象:有如表(一)所示的一段程序中,KeyIn 是一个全局变量。当有按键按下时,键盘的中断服务程序会将对应的键值放入其中,当按键释放后,键盘中断服务程序则把 RESET 值放入该变量。行(1)的条件语句在主程序中,检测有无按键按下,并处理。行(2)则是等待按键释放。调试时,在行(1)和行(2)处各设置一个断点,然后全速运行程序。当程序停在行(1)时按下按键,继续全速运行程序。当程序停在行(2)时,放开按键,继续全速运行程序。这时,发现程序没有向下执行,而是依然回到并停留在行(2)处。打开观察窗口,观察变量KeyIn 的值,确认其值为 RESET。再次起动全速运行,程序依然回到行(2),而不是向下执行。

 
问题详细描述以及ST官方解答见文档:
 
ST MCU实战经验栏目,更多应用问题&官方解答,欢迎下载!

damiaa 发表于 2014-8-17 19:42:49

RE:【ST MCU实战经验】之跳不出的 while 循环

断点设置的原因吧。要把断点设置在WHILE循环里面也许就进去了。试试?:)

HenryChen 发表于 2015-6-10 10:47:14

学习。。。。。。。。。。。。。

stary666 发表于 2015-6-10 13:36:49

看看,,,,,,,,,,,,,,

xilin105 发表于 2015-10-27 10:20:53

本帖最后由 xilin105 于 2015-10-27 10:34 编辑

这个问题以后还真的注意一下,要不然以后出问题都不知道怎么回事。不过一般中断里面改变的变量都会用volatile的。

夏慕冰 发表于 2016-3-4 09:13:13

顶顶顶!!!!

夏慕冰 发表于 2016-3-4 09:24:51

这个问题真的很麻烦,还是避免了好啊。

孤夜听雨—断 发表于 2017-9-22 21:13:43

KeyIn这个变量定义成volatile变量应该就可以解决了,参考看到的一篇微博:
ww删w.cnblogs.co除m/yc_sunn中iwell/archive/2010/06/24/1764文231.html

epochal 发表于 2017-9-22 22:02:59

学习!

我不怕 发表于 2018-12-19 09:01:25

学习别人的经验,总结自己的路子

xinshuwei 发表于 2018-12-19 09:47:41

这个平常真是遇到的呀

leo2002 发表于 2021-1-21 18:22:12

学习了,谢谢楼主
页: [1]
查看完整版本: 【ST MCU实战经验】之跳不出的 while 循环