STM32程序while语句奇怪的问题

2020-01-10 19:45发布

ticks[1] = 100;

while(ticks[1] != 0)  trigger = 0;

就是while这么一句,主程序中只要加这句,就卡死在这里,显示while循环并没有执行,ticks[1]的值在中断里面是一直在减少的,直到减少为0,而且通过串口查看确实最终减少为零了,但是并没有跳出while循环。

那么为什么会卡死? 高手帮分析一下!
19条回答
security
1楼 · 2020-01-10 23:51.采纳回答
本帖最后由 security 于 2016-8-2 17:35 编辑
RudeBoy 发表于 2016-8-2 17:24
好像可以了,为毛啊


1、你需要去搜索引擎里面,搜一下 volatile 的用法
2、这里的原因是:编译器优化掉了,认为 (ticks[1]  != 0) 这个条件永远成立,没意识 ticks[1] 会被改变,因为在 C 编译器看来:ISR 并不会显式的被 C 编译器调用(ISR 是隐式的调用,由硬件中断触发 MCU 调用的)
abutter
2楼-- · 2020-01-12 07:39
看看 volatile 是干啥用的就知道了。
ywlzh
3楼-- · 2020-01-12 09:50
 精彩回答 2  元偷偷看……
Alvin.Mi
4楼-- · 2020-01-12 15:00
不错,不错!学习了! 加深印象
ztlaputa
5楼-- · 2020-01-12 17:34
学习了,只是从书里知道volatile的特性。
六月峰
6楼-- · 2020-01-12 20:35
学习了,用的时候一定注意。
qq335702318
7楼-- · 2020-01-13 02:10
有可能被中断修改的变量  一律需要volatile

一周热门 更多>