您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]if判据为真,却不执行下面的语句
本帖共有791个阅读者
发表帖子 发表投票 回复主题
[求助]if判据为真,却不执行下面的语句
rxxcsz(论坛新手)
rxxcsz
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:546
积分:70
注册时间:2012/4/26
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]if判据为真,却不执行下面的语句
帮忙看看下面这个程序,
if(((cont>=3)&&(RXbuff[cont-3]==0xcc)&&(RXbuff[cont-2]==0x33)\
&&(RXbuff[cont-1]==0xc3)&&(RXbuff[cont]==0x3c))==1)
{cont=0;}
else
{cont++;}
当if中的条件为真是,却不执行cont=0,有谁知道什么原因吗?

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/4/28 8:28:22
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你if条件太多了,你分开写.


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/4/28 15:21:10
rxxcsz(论坛新手)
rxxcsz
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:546
积分:70
注册时间:2012/4/26
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
好像不是这个问题啊,我分开写了,分开判断,
(cont>=3)和
(RXbuff[cont]==0x3c)这些执行正确,但
(RXbuff[cont-3]==0xcc)这些就不行了,是这种写法不行吗?

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/4/28 16:36:09
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你将RXbuff[cont-3]拖到“眼镜”窗口中,当判断这句时,看看值为多少。顺便将cont和cont-3也拖进去,看看是否正常。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/4/28 18:20:10
rxxcsz(论坛新手)
rxxcsz
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:546
积分:70
注册时间:2012/4/26
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
程序是一个UART接收中断处理程序,所以我只能根据结果来判断了。
上传的图片
  2012521041756.jpg [ 38.45 KB 260×419 ] (缩略时请点击查看原图)

 

这个是我接收的数据,总长度为17.
上传的图片
  201252105156.jpg [ 56.19 KB 1094×310 ] (缩略时请点击查看原图)

 

上传的图片
  2012521081556.jpg [ 42.98 KB 1090×256 ] (缩略时请点击查看原图)

 


上传的图片
  2012521052856.jpg [ 60.24 KB 1079×336 ] (缩略时请点击查看原图)

 

三次次判断条件都是为真的,但只有第三次判断判断接收数据最后一位时正确执行了。
不知道究竟为什么。。。




「该帖子被 rxxcsz 在 2012-05-02 10:15:05 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/5/2 10:09:21
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你这种写法可能会出现这种现象,因为编译器可能会先进行判断,再进行串口读数据。所以你进不了if。

你可以增加一条判断,先判断count 是否为 16,然后再判断buffer中的数据,这样编译器不会将顺序打乱优化。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/5/2 11:18:00
rxxcsz(论坛新手)
rxxcsz
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:546
积分:70
注册时间:2012/4/26
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
只是我接收的数据不是一直count=16,只能通过数据帧最后几位是 cc 33 c3 3c 来判断数据帧是否结束。可以不让编译器做这种优化吗?


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/5/2 11:40:33
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

可以,在该函数开始增加 #pragma optimize_off  语句,关闭对该函数的优化,你看是否有效。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/5/2 12:00:27
rxxcsz(论坛新手)
rxxcsz
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:546
积分:70
注册时间:2012/4/26
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
终于知道怎么回事了,把比较值全部写成字符型就可以了,cc写成'\xcc',但是很奇怪啊,为什么一定要这样写呢?弄不明白

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/5/2 16:54:35
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159399 Call, 1 Queries, Processed in 0.031250 second(s),