OpenEdv-开源电子网

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

请各位帮我想想办法有关数据接收处理问题

[复制链接]

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-8-25
在线时间
1 小时
发表于 2013-12-1 17:32:50 | 显示全部楼层 |阅读模式
先说一下需求,有外围无线模块一枚(是通过串口传输数据的),用来接收其他无线模块发送来的数据,其中有两个模块发来的数据比较短,大概20字节左右,另一个模块发来的数据比较长大概4K左右数据量。如何能够正常接收处理这些数据,并且这些数据来源是不定时的。我都忙了几天都没解决,总是不稳定,程序会死,或者场数据无法正常接收。如何解决呢?谢谢个位帮忙解决~~(说明一点未上系统)
开开心心每一天
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-1 20:59:46 | 显示全部楼层
主机 轮询,或者从机做碰撞检测。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-8-25
在线时间
1 小时
 楼主| 发表于 2013-12-1 22:19:55 | 显示全部楼层
回复【2楼】正点原子:
主机 轮询,或者从机做碰撞检测。
---------------------------------
原子哥,主机轮询能说具体点吗?中断是不是不太好?我一直用的是中断,想向您学习学习,第一次设计这个,其他人有好的方法也可以提出,共同学习学习
开开心心每一天
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-2 00:00:12 | 显示全部楼层
回复【3楼】24432972:
---------------------------------
设备1---- 基站----设备2
           |
           |
        设备3
这样,3个设备都是和基站通信,你规定一个协议,默认条件设备1,2,3都是处于接收状态,然后基站开始逐一查询,设备只有在接收到自己对应的特定指令后,才做出应答,否则继续保持接收状态,不干扰其他设备的收发.

这就是基本思想,至于具体的实现,完全靠你的协议去控制.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-12-2 08:38:00 | 显示全部楼层
原子这思路是不行的,设备发送的数据不是可控的(随时都会有数据来 被动接收),主要处理的就是那个4K字节的数据,可以采用队列 和一个预备缓存,再加个10ms定时器

1.定时器 主要就是做个超时监测,判断当前数据是新来的并已经接收结束,
2.4K数据不知道是全部接收完,还是接收一部分处理一部分。如果是全部接收完就好办了,直接开个4K buffer, 分段的话 可以采用512字节分一小段,
  定时器扫描当前是第几个分段了,并做出处理。
1-1
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-2 12:57:54 | 显示全部楼层
回复【5楼】mygod:
---------------------------------
是么?我觉得这是最简单的办法哦.
如果设备不可控,那么如果A设备在发4K的时候,B设备又发送,如何处理?
如果A设备发的时候,B,C,D,E...都发,如何处理?
无线接收,多机同时收发的时候,同一频点肯定有干扰的啊.

至于你说的不可行,我不知道是哪里不可行了?
一对一通信都不可行,那多对一,如何可行?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-2 12:59:21 | 显示全部楼层
至于你说的设备发送数据不可控,这个完全不用担心,你可以做类似modbus协议的操作,收发数据有数据长度字段,然后还有CRC校验.

我就不知道如何不可行了.

这种方法,唯一的缺点就是速度慢.
3个从设备还好,要是300个,3000个,那就真是慢了....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-8-25
在线时间
1 小时
 楼主| 发表于 2013-12-4 19:07:36 | 显示全部楼层
回复【5楼】mygod:
原子这思路是不行的,设备发送的数据不是可控的(随时都会有数据来 被动接收),主要处理的就是那个4K字节的数据,可以采用队列 和一个预备缓存,再加个10ms定时器
1.定时器 主要就是做个超时监测,判断当前数据是新来的并已经接收结束,
2.4K数据不知道是全部接收完,还是接收一部分处理一部分。如果是全部接收完就好办了,直接开个4K buffer, 分段的话 可以采用512字节分一小段,
  定时器扫描当前是第几个分段了,并做出处理。
---------------------------------
这两天网络有问题,一直没上线,刚上网就看了下回帖,谢谢原子哥还有god,god你想的方式和我想的差不多,但是没有用到定时器,因为我用的中断来接收,不是轮询,所以不知道中断稳不稳定。还有就是我已经打算将这4K数据分段发送,重新组包,以前没做过通讯协议,第一次做,没什么经验,不知道可不可行,不过谢谢两位,给我出的注意。再者我这种情况中断没有轮询好是吗?
开开心心每一天
回复 支持 反对

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-8-25
在线时间
1 小时
 楼主| 发表于 2013-12-4 19:08:15 | 显示全部楼层
回复【7楼】正点原子:
至于你说的设备发送数据不可控,这个完全不用担心,你可以做类似modbus协议的操作,收发数据有数据长度字段,然后还有CRC校验.
我就不知道如何不可行了.
这种方法,唯一的缺点就是速度慢.
3个从设备还好,要是300个,3000个,那就真是慢了....
---------------------------------

感谢原子哥百忙之中对我的回复和帮助
开开心心每一天
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-4 19:16:49 | 显示全部楼层
回复【8楼】24432972:
---------------------------------
轮询简单可靠。就是速度慢。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 08:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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