打印
[STM32F1]

求助if语句的一点困惑

[复制链接]
3170|52
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
梦娇|  楼主 | 2016-8-12 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
if(C==1)
{
delay_ms(100000);
}
语句条件为真,开始执行大括号内一个10秒延时。当条件改变为假时是直接跳出大括号还是等延时结束后才跳出呢。如果是等延时结束在跳出大括号有什么办法能让条件为假立即结束括号内语句.那个好心人给说下,我知道这个问题很幼稚,可我都想了几天了想不出来,刚开始学单片机,C语言也是刚接触,你们别笑我

沙发
changle11sdo5| | 2016-8-12 16:02 | 只看该作者
实测一下就几分钟的事,用不着想几天

使用特权

评论回复
板凳
reverse_L0111| | 2016-8-12 16:36 | 只看该作者
条件为假时,大括号内的语句不会执行了

使用特权

评论回复
地板
joyme| | 2016-8-12 16:39 | 只看该作者
肯定是等延时完才能跳出
想要快速跳出,就等快速扫描(比较)条件(比如1ms比较一次,变假后1ms就能跳出,1s比较一次,变假后1s才能跳出)
可以在delay_ms()函数里增加比较语句,为假直接返回

使用特权

评论回复
5
mmuuss586| | 2016-8-12 16:43 | 只看该作者
条件为真执行,为假就不执行了;

使用特权

评论回复
6
玄德| | 2016-8-12 16:51 | 只看该作者

换个思路

while   (C==1);


使用特权

评论回复
7
E-Kaia| | 2016-8-12 17:38 | 只看该作者
肯定是等延时结束才会跳出来的,不知道为啥要这样用延时

使用特权

评论回复
8
梦娇|  楼主 | 2016-8-12 18:00 | 只看该作者
changle11sdo5 发表于 2016-8-12 16:02
实测一下就几分钟的事,用不着想几天

试过了,要等到延时完才跳出,就是不知道怎么让条件为假时放弃正在的延时立即退出,谢谢你啊

使用特权

评论回复
9
梦娇|  楼主 | 2016-8-12 18:02 | 只看该作者
reverse_L0111 发表于 2016-8-12 16:36
条件为假时,大括号内的语句不会执行了

谢谢你啊

使用特权

评论回复
10
yklstudent| | 2016-8-12 18:03 | 只看该作者
你这个条件为假时,不是立即就退出了嘛

使用特权

评论回复
11
梦娇|  楼主 | 2016-8-12 18:03 | 只看该作者
mmuuss586 发表于 2016-8-12 16:43
条件为真执行,为假就不执行了;

可是条件为假要等延时完了才不执行

使用特权

评论回复
12
梦娇|  楼主 | 2016-8-12 18:05 | 只看该作者
玄德 发表于 2016-8-12 16:51
换个思路

while   (C==1);

这个可以试试,谢谢

使用特权

评论回复
13
梦娇|  楼主 | 2016-8-12 18:06 | 只看该作者
E-Kaia 发表于 2016-8-12 17:38
肯定是等延时结束才会跳出来的,不知道为啥要这样用延时

是用PWM控制电机的,这个延时就是收到电机停止信号后,在让电机转动会停,谢谢你啊

使用特权

评论回复
14
梦娇|  楼主 | 2016-8-12 18:09 | 只看该作者
joyme 发表于 2016-8-12 16:39
肯定是等延时完才能跳出
想要快速跳出,就等快速扫描(比较)条件(比如1ms比较一次,变假后1ms就能跳出,1s比 ...

谢谢,我试下

使用特权

评论回复
15
icecut| | 2016-8-12 18:20 | 只看该作者
4楼 明白你意思....
另外,条件变化是在中断里吧....

使用特权

评论回复
16
justtest111| | 2016-8-12 18:39 | 只看该作者
控制电机用定时器中断吧,你这delay太恐怖了。

使用特权

评论回复
17
戈卫东| | 2016-8-12 18:53 | 只看该作者
看起来似乎是100秒。。。。。如果它已经进入了那个 delay_ms 就要等到100秒完了才出来

使用特权

评论回复
18
ddllxxrr| | 2016-8-12 19:05 | 只看该作者
条件为假根本不进大括号。OVER

使用特权

评论回复
19
ianhom| | 2016-8-12 19:27 | 只看该作者
int D = 100000;
while((C==1)&&(D > 0))
{
    delay_ms(1);
    D--;
}

使用特权

评论回复
评论
zjh2009 2016-8-23 22:53 回复TA
就是这个,1ms一次检查。 
20
changle11sdo5| | 2016-8-12 19:50 | 只看该作者
梦娇 发表于 2016-8-12 18:00
试过了,要等到延时完才跳出,就是不知道怎么让条件为假时放弃正在的延时立即退出,谢谢你啊 ...

只有C值是1时,才会延时100秒,是不是其它代码有问题,另外注意电机有惯性,还会干扰单片机…

使用特权

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

本版积分规则

9

主题

108

帖子

6

粉丝