打印
[应用相关]

while(g_time1<10)这语句有问题吗?

[复制链接]
1239|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcuatmel|  楼主 | 2014-6-12 15:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天写程序,遇奇怪问题:
Keil下写STM32F107程序,等待延时用如下方法:
while (g_time1<10);

g_time1在定时器中断中自加,可是g_time1超过10好多也不跳出来,就是在那儿停着,不知为什么?请指点。

后来改成条件break也不行,while就是跳不出来 。
沙发
电子无聊大神| | 2014-6-12 15:15 | 只看该作者
建议把中断函数贴出来

使用特权

评论回复
板凳
mcuatmel|  楼主 | 2014-6-12 15:19 | 只看该作者
搞定了,经高人指点,变量前加__IO就好用了
__IO int g_time1;
这样写就好用了。
可是不太明白,同样在Keil中51的程序就好用,同样的写法在IAR中也好用。

使用特权

评论回复
地板
想做大牛的小马| | 2014-6-12 15:35 | 只看该作者
其实就是个volitile。。。。要知其所以然啊,告诉编译器被其修饰的值不能被优化,
一般在multi-processor或multi-thread用的变量,或是中断中使用的变量,你的中断程序里只是自加,
可能被keil优化了。。。。~

使用特权

评论回复
5
想做大牛的小马| | 2014-6-12 15:38 | 只看该作者
想做大牛的小马 发表于 2014-6-12 15:35
其实就是个volitile。。。。要知其所以然啊,告诉编译器被其修饰的值不能被优化,
一般在multi- ...

拼写错误,丢人了。。。volatile

使用特权

评论回复
6
mmuuss586| | 2014-6-12 16:23 | 只看该作者

解决了就好

使用特权

评论回复
7
sun1238898| | 2014-6-12 16:31 | 只看该作者
应该是你优先级调的很高,导致编译器将此变量优化了‘

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

512

主题

1456

帖子

2

粉丝