OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14047|回复: 12

if(rxlen==RS485_RX_CNT&&rxlen) 这句怎么理解

[复制链接]

31

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-3-29
在线时间
0 小时
发表于 2013-4-1 14:38:24 | 显示全部楼层 |阅读模式
if(rxlen==RS485_RX_CNT&&rxlen)
请问一下这句怎么理解,C学的不好。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2014-3-12
在线时间
1 小时
发表于 2014-3-12 19:44:11 | 显示全部楼层
==的优先级比&&的高,所以这句话if(rxlen==RS485_RX_CNT&&rxlen)的意思是先判断rxlen是否等于RS485_RX_CNT,即10ms内没有收到数据(接收完成),再和rxlen相与,判断非零,即为接收到数据。
回复 支持 5 反对 0

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-11 18:07:14 | 显示全部楼层
关键是有个延时10ms的,一开始rxlen=RS485_RX_CNT赋值,延时10ms,在这10ms之内如果串口在接收数据,那么RS485_RX_CNT在++,那么if中判断则rxlen不等于RS485_RX_CNT说明接收没完成;如果在这10ms之内串口不在接收数据,那么RS485_RX_CNT不再++,那么if中判断则rxlen等于RS485_RX_CNT且rxlen不为0则说明接收完成,接收数据长度为RS485_RX_CNT
回复 支持 4 反对 0

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7568
金钱
7568
注册时间
2016-11-30
在线时间
643 小时
发表于 2017-4-26 09:22:56 | 显示全部楼层
这句话不就是rxlen等于了485要接收的数据,切rxlen不为0的时候。的确是接收完成了啊!
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-1 16:27:38 | 显示全部楼层
实际验证即可。不过建议里面再加多个括号,方便阅读代码。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-7-16
在线时间
0 小时
发表于 2013-7-27 19:14:50 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这句为什么可以判断 接收已经完成呢RXlen是RS485_RX_CNT是程序刚开始时候付给他的值    如果程序刚开始的时候没接收到数据,那么RXLEN=0,在之后的10毫秒内接受到数据了  那么RS485_RX_CNT 就不为0了  那么这个语句就是 逻辑假了  下面的赋值就不会进行了 那么接下来的接收就不会进行了 if(rxlen==RS485_RX_CNT&&rxlen)//
{
  for(i=0;i<rxlen;i++)
{
buf=RS485_RX_BUF;
}
*len=RS485_RX_CNT;
RS485_RX_CNT=0;
}
} 这么理解对吗?  对这个判断语句很不理解啊>
STM32 学习中
回复 支持 反对

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-7-16
在线时间
0 小时
发表于 2013-7-27 19:17:23 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
说错了    还是逻辑真, 但是下面  的接收貌似进行不了额
STM32 学习中
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-27 19:43:12 | 显示全部楼层
回复【4楼】xc1989:
---------------------------------
你测试过没有?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2013-4-15
在线时间
0 小时
发表于 2013-8-5 09:47:04 | 显示全部楼层
同问,为何用这么条语句判断接收完成了没有?谁能解释一下
回复 支持 反对

使用道具 举报

4

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2017-4-5
在线时间
24 小时
发表于 2017-4-25 20:59:30 | 显示全部楼层
解释一下吧,我也不懂
回复 支持 反对

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
发表于 2018-11-11 17:10:38 | 显示全部楼层
我刚才把这个语句去掉了,结果输出的数据乱七八糟的,这个其实是做了一个10ms的数据对比,相当于10ms以前接受到了一个数据,如果这个数据有变化或者和10ms以后的数据不一样,那就说明没有接收完毕,如果接收到的数据没有变化了,说明接收完了,接收完了才能进行下面的数据变化之类的操作
回复 支持 反对

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-11 18:06:44 | 显示全部楼层
happylwj2002 发表于 2013-8-5 09:47
同问,为何用这么条语句判断接收完成了没有?谁能解释一下

关键是有个延时10ms的,一开始rxlen=RS485_RX_CNT赋值,延时10ms,在这10ms之内如果串口在接收数据,那么RS485_RX_CNT在++,那么if中判断则rxlen不等于RS485_RX_CNT说明接收没完成;如果在这10ms之内串口不在接收数据,那么RS485_RX_CNT不再++,那么if中判断则rxlen等于RS485_RX_CNT且rxlen不为0则说明接收完成,接收数据长度为RS485_RX_CNT
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2021-10-15
在线时间
13 小时
发表于 2021-12-21 13:44:55 | 显示全部楼层
RS485_RX_CNT 之所以会变是因为中断函数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 17:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表