打印

怎么在一个地方等待,条件满足了不能向下运行

[复制链接]
2079|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
handlike|  楼主 | 2011-5-26 21:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么在一个地方等待,条件满足了不能向下运行。

如    Delay_Time=0;
     while(Delay_Time<100);
       ..........
      ...........

我在时钟中断(SYSTICK)中设置了Delay_Time每进入一次其加1,仿真时总是停在
while(Delay_Time<100);这一行,打断可以看出Delay_Time大于100了,可还是停在这一行不向下运行。但是如果这样就可以了。
  while(Delay_Time<100)
  {  
    delay(10);
   } 

其中 delay()为一个延时过程。在51中前面的方法在while原地等是可以的,可在STM32中就不灵了呢?哪位给个解答,谢谢。
沙发
songbangyan| | 2011-5-27 10:52 | 只看该作者
Delay_Time在什么位置发生变化呢?

使用特权

评论回复
板凳
sjnh| | 2011-5-27 11:02 | 只看该作者
中断中操作的是Delay_Time, 而while中操作的只是临时变量Delay_Time的临时变量,你需要用volatile修饰,
当然还有中断冲突的可能

使用特权

评论回复
地板
handlike|  楼主 | 2011-5-27 17:17 | 只看该作者
声明一下。Delay_Time是外部变量,可以在同一工程内不同C文件间对其访问。

使用特权

评论回复
5
CC2530| | 2011-5-27 17:46 | 只看该作者
volatile unsigned int Delay_Time;

使用特权

评论回复
6
handlike|  楼主 | 2011-5-28 08:44 | 只看该作者
经过确认不是楼上提到的变量易失性被优化掉的问题(这方法试过了),在原地等后面加一个小的delay();就可以向下运行。不知你们用什么方法等待一个条件满足后再向下运行的?

使用特权

评论回复
7
zchong| | 2011-5-28 09:00 | 只看该作者
实在不行看汇编,就是循环那几行代码

使用特权

评论回复
8
zchong| | 2011-5-28 09:01 | 只看该作者
最好贴个完整的代码,给大家看看

使用特权

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

本版积分规则

个人签名:男怕入错行,女怕嫁错郎。 我是来灌水的,顺便采点蘑菇。

12

主题

661

帖子

2

粉丝