发表于:2002-12-24 10:12:00
楼主
各位老师,在PCIS-DASK中的连续AI采样中的Double-buffer Mode中有几个函数,分别是AI_AsyncDblBufferHalfReady(), AI_AsyncDblBufferTransfer().
我理解的是,程序在我们设置好连续采样模式与双缓存大小后,就让AD(PCI-9112)以DMA方式先向半缓冲区A中写数据,我们则使用AI_AsyncDblBufferHalfReady(以下简称HalfReady)来检测是否已写满A,若写满,则我们可以用AI_AsyncDblBufferTransfer(以下简称Transfer)来取走A中的数据,而同时AD还在以DMA方式向半缓冲区B中写数据。
问题是,为什么在用Transfer函数取走数据前若不使用HalfReady函数检测,取出的数据就完全不是输入信号呢?(我输入的是正弦信号,记录到的却是直线)。按理说,不检测半缓存就取数据只应该是会重复取或漏取而已,不应该取出0电位呀?
另外,为什么在连续使用两次HalfReady后再使用Transfer取出的数据与只使用一次HalfReady就用Transfer取出的数据不一样?相反,若只用一次HalfReady后连续用两次Transfer取出的数据与只使用一次Transfer得到的数据一样呢?
我猜想,是不是HalfReady函数不仅仅是起检测的作用,还起一种标记作用呢?比如说如果HalfReady标记当前的可取数据区是A的话,无论我连续用几次Transfer,取的数据始终是A中的,而B中的数据则被禁用了呢?
请各位老师能详细介绍一下AI_AsyncDblBufferHalfReady与AI_AsyncDblBufferTransfer的工作原理,如果可以的话再讲讲AI_AsyncCheck的工作原理吧。谢谢!