STM32程序while语句奇怪的问题

2020-01-10 19:45发布

ticks[1] = 100;

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

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

那么为什么会卡死? 高手帮分析一下!
20条回答
security
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 调用的)

一周热门 更多>