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

[复制链接]
4332|41
win8900 发表于 2016-5-19 15:16 | 显示全部楼层
 楼主| feng199510 发表于 2016-5-19 15:52 | 显示全部楼层
candysnape 发表于 2016-5-19 13:38
i是无符号数,最大=255
(i*0.034)/2 最大=4
所以if条件永远成立

那该如何修改?我想让他距离小于15cm时候 停止RUN
 楼主| feng199510 发表于 2016-5-19 15:53 | 显示全部楼层
ticomi 发表于 2016-5-19 13:35
确实,出问题最先查找的就是程序问题,不要怀疑编译器。不是编译器不会出问题,而是一般让编译出的问题都 ...

enen 受教了!
亚平宁的清风 发表于 2016-5-19 17:42 | 显示全部楼层
unsigned char outcomeH,outcomeL,i;

i=outcomeH*256+outcomeL;

用一个unsigned char 的i去存outcomeH*256这个有可能会溢出
lr_xgm 发表于 2016-5-19 20:20 | 显示全部楼层
372424522 发表于 2016-5-19 21:01 | 显示全部楼层
应该是会一直执行     
RUN=0;
BEEP=1;
吧?
 楼主| feng199510 发表于 2016-5-19 21:16 | 显示全部楼层
372424522 发表于 2016-5-19 21:01
应该是会一直执行     
RUN=0;
BEEP=1;

是的、好像是i不够
 楼主| feng199510 发表于 2016-5-19 21:16 | 显示全部楼层

那该怎么改?我想让他距离小于15cm时候执行
 楼主| feng199510 发表于 2016-5-19 21:17 | 显示全部楼层
亚平宁的清风 发表于 2016-5-19 17:42
unsigned char outcomeH,outcomeL,i;

i=outcomeH*256+outcomeL;

那用uint可以吗?
总在阳光下发呆 发表于 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)里面你在判断之前就开了总中断,可能还没有判断就再次进入中断了。
 楼主| feng199510 发表于 2016-5-19 21:28 | 显示全部楼层
总在阳光下发呆 发表于 2016-5-19 21:21
distance=(int)((i*0.034)/2);的时候((i*0.034)/2)先转换为float型,然后转换为int型,这样等到第二次判断 ...

那该如何设置中断的位置?其实那些interrupt 我弄得不是很懂
372424522 发表于 2016-5-19 21:53 | 显示全部楼层
feng199510 发表于 2016-5-19 21:16
是的、好像是i不够

我觉得哦,是因为
succeed_flag 一直 = 0;
导致
distance=0;
 楼主| feng199510 发表于 2016-5-19 22:01 | 显示全部楼层
372424522 发表于 2016-5-19 21:53
我觉得哦,是因为
succeed_flag 一直 = 0;
导致

那应该怎么弄?我定义的succeed 是bit型的
会不会有影响?
ningling_21 发表于 2016-5-20 15:35 | 显示全部楼层
i 定义成

float  i ;
 楼主| feng199510 发表于 2016-5-20 15:58 | 显示全部楼层
ningling_21 发表于 2016-5-20 15:35
i 定义成

float  i ;

好像我已经知道问题出在哪里
应该是else条件那里令distance等于0了
总在阳光下发呆 发表于 2016-5-20 22:11 | 显示全部楼层
feng199510 发表于 2016-5-19 21:28
那该如何设置中断的位置?其实那些interrupt 我弄得不是很懂

在if判断语句的后面开总中断,并且在if语句里面清掉success_flag,就是进一次中断就可以判断一次。
bobde163 发表于 2016-5-20 22:44 | 显示全部楼层
本帖最后由 bobde163 于 2016-5-20 22:46 编辑

“无视”是执行了还是不执行?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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