2020-01-10 19:45发布
RudeBoy 发表于 2016-8-2 17:24 好像可以了,为毛啊
blxy 发表于 2016-8-2 17:20 定义ticks时,加volatile前缀试试
security 发表于 2016-8-2 17:32 1、你需要去搜索引擎里面,搜一下 volatile 的用法 2、这里的原因是:编译器优化掉了,认为 (tick[1] != ...
liwey 发表于 2016-8-2 18:06 很容易理解的, ticks[1] 的值, 在这个循环体内是不是没有被修改过(如果没有中断的话)?那么编译器就 ...
RudeBoy 发表于 2016-8-2 18:39 恩恩 明白了,还真是头一次遇到这个问题
最多设置5个标签!
1、你需要去搜索引擎里面,搜一下 volatile 的用法
2、这里的原因是:编译器优化掉了,认为 (ticks[1] != 0) 这个条件永远成立,没意识 ticks[1] 会被改变,因为在 C 编译器看来:ISR 并不会显式的被 C 编译器调用(ISR 是隐式的调用,由硬件中断触发 MCU 调用的)
好像可以了,为毛啊
刚才查了一下,但是没有想明白为什么会被优化掉,多谢指教!
恩恩 明白了,还真是头一次遇到这个问题
哈哈, 这还不算, 有时候debug版本正常运行, release版本不正常(被优化掉了), 我第一次碰到这个问题,也感觉好不可思议。
一周热门 更多>