[应用相关] while(g_time1<10)这语句有问题吗?

[复制链接]
1547|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优化了。。。。~
想做大牛的小马 发表于 2014-6-12 15:38 | 显示全部楼层
想做大牛的小马 发表于 2014-6-12 15:35
其实就是个volitile。。。。要知其所以然啊,告诉编译器被其修饰的值不能被优化,
一般在multi- ...

拼写错误,丢人了。。。volatile
mmuuss586 发表于 2014-6-12 16:23 | 显示全部楼层

解决了就好
sun1238898 发表于 2014-6-12 16:31 | 显示全部楼层
应该是你优先级调的很高,导致编译器将此变量优化了‘
您需要登录后才可以回帖 登录 | 注册

本版积分规则

512

主题

1456

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部