求助:程序问题

[复制链接]
1878|5
 楼主| zwxhehe2012 发表于 2013-5-22 11:03 | 显示全部楼层 |阅读模式
程序问题:请教一下,现在传感器每隔1ms就采样一次数据,一次采样得到4个数据,但是我发送数据一次需要80ms,为了保证数据可靠,我需要连续发4次,原来程序是等4次发送数据完成后,传感器才会重新采集数据然后发送第二次数据,这样等于320ms采样一次数据发送一个数据,这样造成,我的接收端接收的数据不连续,我想就是把采集的数据放进队列了,然后定时50ms采样一次数据,然后发送从队列里取数据,以前没用过队列,现在需要每50ms采集的数据放进队列尾部,增加一个数据,然后发送数据从队列头部取走一个数据,队列去掉一个数据,而且在队列数据满了以后,将最早的数据更新为现在最新采集的数据,还有什么时候队列的数据已经全部发送完成,有没有范例程序?或者有什么好的编程写法?麻烦指导一下,非常感谢!
南宫云明 发表于 2013-5-22 11:37 | 显示全部楼层
思路,做个参考:
定义: 队列容量-->A(常量)
       实际队列中有效个数-->B
       队列头-->C
       队列尾-->D

刚开始,B=0,C=0,D=0;

如果有数据扔进队列,B++,C++;
定时扫描队列,如果C!=D,说明有数据,则处理队列中数组下标为D的成员,处理完成后,D++,B--。

这样就可以进行队列处理了。。。。以上只是一种方法,不是很全面,实际编程中还要加一些队列如果满了的处理方法等
hgjinwei 发表于 2013-5-22 16:12 | 显示全部楼层
是80ms发送一次数据,数据量可能大于一次采集的4个数据,还是80ms发送一次采集的4个数据?
dirtwillfly 发表于 2013-5-22 20:41 | 显示全部楼层
为啥要发四遍数据?怕出错可以加上校验啊
 楼主| zwxhehe2012 发表于 2013-5-23 09:52 | 显示全部楼层
hgjinwei 发表于 2013-5-22 16:12
是80ms发送一次数据,数据量可能大于一次采集的4个数据,还是80ms发送一次采集的4个数据? ...

是80ms发送一次采集的4个数据,然后连着发4次,因为是无线传输,怕第一次发送的数据受到干扰,造成接收错误,所以连续发送4次,接收端连续收到两次相同的数据才会执行控制,所以连续发送4次
hgjinwei 发表于 2013-5-24 09:04 | 显示全部楼层
传感器1ms采集一次数据,你80ms才发送一次采集的数据?到要发送时,传感器都采集了80次数据,那不是要丢失掉79次数据?

我觉得可以这样处理:
你可以在数据采集端设一个FIFO缓存,并作为通信从端。接收到主机端指令时,才将采集到的数据发出去(当然,数据通信过程要有协议,校验等措施)。
如果N久主机都没来读数据,而导致FIFO满时,就丢弃早先采集到的数据。
FIFO深度及采集频率要考虑通信速率及主机读取频率。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

48

帖子

1

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