OpenEdv-开源电子网

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

上边标这里的那块怎么计算的???(rxlen==RS485_RX_CNT&&rxlen)这里 ,这里不是一直是0吗??u8 rxlen=RS485_RX_C

[复制链接]

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
发表于 2014-3-14 11:36:49 | 显示全部楼层 |阅读模式
#ifdef EN_USART2_RX   //如果使能了接收    
//接收缓存区
u8 RS485_RX_BUF[64];   //接收缓冲,最大64个字节.
//接收到的数据长度
u8 RS485_RX_CNT=0;   
void USART2_IRQHandler(void)
{
u8 res;    
if(USART2->SR&(1<<5))//接收到数据
{  
res=USART2->DR;  
if(RS485_RX_CNT<64)
{
RS485_RX_BUF[RS485_RX_CNT]=res; //记录接收到的值
RS485_RX_CNT++; //接收数据增加1 
}    
#endif




//RS485查询接收到的数据 //buf:接收缓存首地址 //len:读到的数据长度 void RS485_Receive_Data(u8 *buf,u8 *len) { u8 rxlen=RS485_RX_CNT; u8 i=0; *len=0; //默认为0 delay_ms(10); //等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束 if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了
    ,,<<<<<<<<<<<<<<<<<<<<<这里》》》》》》》》》》》》》》》》》 { for(i=0;i<rxlen;i++) { buf=RS485_RX_BUF; } *len=RS485_RX_CNT; //记录本次数据长度 RS485_RX_CNT=0; //清零 } }


上边标这里的那块怎么计算的???(rxlen==RS485_RX_CNT&&rxlen)这里   ,这里不是一直是0吗??u8 rxlen=RS485_RX_CNT;


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-14 15:25:42 | 显示全部楼层
回复【楼主位】傻子:
---------------------------------
为什么一直是0呢?
如果 RS485_RX_CN=20.
那么,刚进入的时候:rxlen=RS485_RX_CN=20.
假定10ms内不再受到数据,RS485_RX_CN一直是20.
后面判断:
if rxlen==RS485_RX_CN 成立,然后rxlen也是有数据的(非零)也成立。
那么这个判断:if(rxlen==RS485_RX_CNT&&rxlen)
自然成立啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 2 反对 0

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-3-14 16:52:42 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
明白了,还有这里   主函数                          !!!原子哥辛苦了!!!  !!!原子哥辛苦了!!!
while(1)
{
key=KEY_Scan(0);
if(key==KEY_RIGHT)//KEY0按下,发送一次数据
{
for(i=0;i<5;i++)
{
rs485buf=cnt+i;//填充发送缓冲区
LCD_ShowxNum(60+i*32,190,rs485buf,3,16,0X80); //显示数据
  }
RS485_Send_Data(rs485buf,5);//发送5个字节     
}  
RS485_Receive_Data(rs485buf,&key);                《《《《《《《《《《《《《《《这里》》》》》》》》》》》》》》》》》
if(key)//接收到有数据
{
if(key>5)key=5;//最大是5个数据.
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
标注(这里)的地方。。

一;之前是发送,是不是发送完马上执行读接收函数?  
二;RS485_Receive_Data(rs485buf,&key)    里边的&key是什么意思,key不是检测的键值吗(0或1)?            
                  //RS485查询接收到的数据
                 //buf:接收缓存首地址
                //len:读到的数据长度
               void RS485_Receive_Data(u8 *buf,u8 *len)
          这个u8 *len是读到的数据长度啊??
三;u8 *len这个数据长度,怎么还弄个指针??,长度就是一个整形就行了啊???
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-14 23:15:07 | 显示全部楼层
回复【3楼】傻子:
---------------------------------
1,看代码。
2,取地址,传送进去,然后得到值回来,给上一级函数使用。可以理解为“探囊取物”
3,好好理解下指针参数和普通类型参数的区别,要你实现探囊取物,如何做?普通方式可行么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2017-7-29
在线时间
18 小时
发表于 2017-8-21 19:27:20 | 显示全部楼层
漂亮的解释
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2017-10-14
在线时间
0 小时
发表于 2017-10-14 18:55:23 | 显示全部楼层
正点原子 发表于 2014-3-14 15:25
回复【楼主位】傻子:
---------------------------------
为什么一直是0呢?
如果&nbsp;RS485_RX_CN=20.
那 ...

你好,我想问问,这里len指针参数我没看懂为什么用指针,可以解答一下吗?谢谢!
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-6-2
在线时间
9 小时
发表于 2018-7-28 11:47:00 | 显示全部楼层
len指针为什么要做参数啊
回复 支持 反对

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-7-30 16:16:44 | 显示全部楼层
kuningayvLsR 发表于 2018-7-28 11:47
len指针为什么要做参数啊

兄弟你的c语言有待好好学习理解啊,原子哥的解释“探囊取物”很好玩但是很贴切
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.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 17:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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