请教数据采集的双缓冲原理 点击:4042 | 回复:7



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2004-01-02 18:58:00
楼主
哪位大虾了解数据采集的双缓冲原理,请指点一二! 谢谢!



gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-02-04 11:12:00
1楼
双缓冲一个是循环缓冲,一个是用户缓冲。循环缓冲又分成两个部分。采集的数据先写入循环缓冲,当半满时,循环缓冲的前半部分写入到用户缓冲中。采集的数据继续向循环缓冲的后半部分写入。当循环缓冲全写满时,循环缓冲的后半部分数据再写入用户缓冲中。此时,采集的数据会继续写人循环缓冲的前半部分,如此反复,每半满一次,循环缓冲的前或后半部分就会被写到用户缓冲中去,从而达到连续高速采集的功能。

李侃

  • 精华:5帖
  • 求助:0帖
  • 帖子:8帖 | 59回
  • 年度积分:0
  • 历史总积分:158
  • 注册:2001年7月11日
发表于:2002-02-05 21:29:00
2楼
使用双缓冲(double buffer)是为了解决连续采数的功能。在DOS环境下,一次DMA或中断方式采集数据通常不能超过64K(2^16),在Windows环境下,一次DMA的数据量依赖与板卡的PCI控制芯片的寻址范围和系统物理内存大小(如使用AMCC5933的话,只能一次DMA 64MB数据),无法实现长时间连续采数功能。因此必须要靠double buffer 来实现长时间连续采数功能。有一些板卡提供FIFO半满中断功能,利用这个功能,也可以实现双缓冲连续采数功能。 值得注意的是,double buffer方式涉及到内存的频繁读写,因此当采样速率很高>10M/s或是系统任务很繁忙的时候,往往会出现丢数现象。

suntide

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 8回
  • 年度积分:0
  • 历史总积分:291
  • 注册:2003年8月04日
发表于:2003-08-04 17:29:00
3楼
是新人,目前在做一个课题。使用PCI9118采集数据,如果选用双缓冲模式,当buffer比较小时,经常会发生丢数现象。例如在300K采样速率,缓冲设为1024时,甚至都会发生丢数。请问斑竹,这种现象是否正常?不知道是否我程序的原因。

国安

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 242回
  • 年度积分:0
  • 历史总积分:256
  • 注册:2002年4月15日
发表于:2003-08-05 10:20:00
4楼
加大缓存试一下。 1k还是比较小的。

ssssssss

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 12回
  • 年度积分:0
  • 历史总积分:74
  • 注册:2002年6月29日
发表于:2004-01-02 16:07:00
5楼
1 所说的双缓冲的物理地址在哪里?卡上还是计算机里面? 2 当半满时,能否直接把数据写到硬盘上呢?

交流的天空

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 93回
  • 年度积分:0
  • 历史总积分:114
  • 注册:2003年3月18日
发表于:2004-01-02 18:58:00
6楼
1、多数情况下都是在dll里面做好了,只要关注你设定的buffer的起始位置就好了 2、应该可以!

一水淼

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2005年4月02日
发表于:2005-04-25 20:11:00
7楼
在DOS环境下,一次DMA或中断方式采集数据通常不能超过64K(2^16), 我认为:在DOS环境下,一次DMA或中断方式采集数据通常不能超过640KB

热门招聘
相关主题

官方公众号

智造工程师