打印

想问一下 为什么if会无视掉条件?

[复制链接]
楼主: feng199510
手机看帖
扫描二维码
随时随地手机跟帖
21
win8900| | 2016-5-19 15:16 | 只看该作者 回帖奖励 |倒序浏览

使用特权

评论回复
22
feng199510|  楼主 | 2016-5-19 15:52 | 只看该作者
candysnape 发表于 2016-5-19 13:38
i是无符号数,最大=255
(i*0.034)/2 最大=4
所以if条件永远成立

那该如何修改?我想让他距离小于15cm时候 停止RUN

使用特权

评论回复
23
feng199510|  楼主 | 2016-5-19 15:53 | 只看该作者
ticomi 发表于 2016-5-19 13:35
确实,出问题最先查找的就是程序问题,不要怀疑编译器。不是编译器不会出问题,而是一般让编译出的问题都 ...

enen 受教了!

使用特权

评论回复
24
亚平宁的清风| | 2016-5-19 17:42 | 只看该作者
unsigned char outcomeH,outcomeL,i;

i=outcomeH*256+outcomeL;

用一个unsigned char 的i去存outcomeH*256这个有可能会溢出

使用特权

评论回复
25
lr_xgm| | 2016-5-19 20:20 | 只看该作者
i不够

使用特权

评论回复
26
372424522| | 2016-5-19 21:01 | 只看该作者
应该是会一直执行     
RUN=0;
BEEP=1;
吧?

使用特权

评论回复
27
feng199510|  楼主 | 2016-5-19 21:16 | 只看该作者
372424522 发表于 2016-5-19 21:01
应该是会一直执行     
RUN=0;
BEEP=1;

是的、好像是i不够

使用特权

评论回复
28
feng199510|  楼主 | 2016-5-19 21:16 | 只看该作者

那该怎么改?我想让他距离小于15cm时候执行

使用特权

评论回复
29
feng199510|  楼主 | 2016-5-19 21:17 | 只看该作者
亚平宁的清风 发表于 2016-5-19 17:42
unsigned char outcomeH,outcomeL,i;

i=outcomeH*256+outcomeL;

那用uint可以吗?

使用特权

评论回复
30
总在阳光下发呆| | 2016-5-19 21:21 | 只看该作者
distance=(int)((i*0.034)/2);的时候((i*0.034)/2)先转换为float型,然后转换为int型,这样等到第二次判断的时候,i就是int型变量了,大于15很正常啊。而且从float转换到int时会损失精度,建议全部设为float或者double型的。还有,就是在while(1)里面你在判断之前就开了总中断,可能还没有判断就再次进入中断了。

使用特权

评论回复
31
feng199510|  楼主 | 2016-5-19 21:28 | 只看该作者
总在阳光下发呆 发表于 2016-5-19 21:21
distance=(int)((i*0.034)/2);的时候((i*0.034)/2)先转换为float型,然后转换为int型,这样等到第二次判断 ...

那该如何设置中断的位置?其实那些interrupt 我弄得不是很懂

使用特权

评论回复
32
372424522| | 2016-5-19 21:53 | 只看该作者
feng199510 发表于 2016-5-19 21:16
是的、好像是i不够

我觉得哦,是因为
succeed_flag 一直 = 0;
导致
distance=0;

使用特权

评论回复
33
feng199510|  楼主 | 2016-5-19 22:01 | 只看该作者
372424522 发表于 2016-5-19 21:53
我觉得哦,是因为
succeed_flag 一直 = 0;
导致

那应该怎么弄?我定义的succeed 是bit型的
会不会有影响?

使用特权

评论回复
34
ningling_21| | 2016-5-20 15:35 | 只看该作者
i 定义成

float  i ;

使用特权

评论回复
35
feng199510|  楼主 | 2016-5-20 15:58 | 只看该作者
ningling_21 发表于 2016-5-20 15:35
i 定义成

float  i ;

好像我已经知道问题出在哪里
应该是else条件那里令distance等于0了

使用特权

评论回复
36
总在阳光下发呆| | 2016-5-20 22:11 | 只看该作者
feng199510 发表于 2016-5-19 21:28
那该如何设置中断的位置?其实那些interrupt 我弄得不是很懂

在if判断语句的后面开总中断,并且在if语句里面清掉success_flag,就是进一次中断就可以判断一次。

使用特权

评论回复
37
bobde163| | 2016-5-20 22:44 | 只看该作者
本帖最后由 bobde163 于 2016-5-20 22:46 编辑

“无视”是执行了还是不执行?

使用特权

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

本版积分规则