为了实现传统的DMA FIFO,LabVIEW使用多个数据副本在LabVIEW和设备驱动程序之间移动数据。这些额外的数据副本会消耗CPU周期,并限制DMA FIFO构建的应用程序的大小。对于大型的资源密集型的应用程序,可以考虑使用外部数据值参考,避免数据副本,降低CPU占用。

使用的对象

使用下列程序框图对象执行DMA传输,同时产生更少的数据副本:

调用方法函数 条件结构 元素同址操作结构 删除数据值引用 合并错误

操作步骤

创建下列程序框图,执行DMA传输,同时产生更少的数据副本。该程序框图使用了一个调用方法节点,节点配置为“采集读取区域”方法,从缓冲区采集读取区域,然后将引用通过元素同址操作结构传递至读取区域。元素同址操作结构中的子VI执行特定于应用程序的代码。在子VI执行后,删除数据值引用函数释放缓冲区上的范围。

根据您的实际需求自定义灰色部分的内容。

下面列出了上述程序框图的要点:

配置调用方法函数。根据应用程序的需要,选择采集写入区域或采集读取区域方法。
将读取区域或写入区域的引用连接至元素同址操作结构的数据值读取/写入节点。
加入定制的代码,实现程序的目标。
删除数据值引用。您必须删除数据值引用,释放缓冲区空间,使其他程序可继续访问缓冲区。
确保VI使用合并错误函数,按正确的顺序处理错误。必须先处理调用方法函数的输入错误,然后处理元素同址结构的输入错误。

提示和疑难解答

在采集一个区域时,元素数量和区域中的元素并不一定相等。对于某些终端,内存中分配的字节数会被强制转换为某个终端有效的值,且为4096的倍数。对于这些目标,指定元素数量为4096的倍数,以避免缓冲溢出。关于有效FIFO深度的详细信息,请参考终端硬件文档。

如果缓冲区无法采集某个区域,则调用方法函数返回错误-61219 。在大多数情况下,没有删除调用方法函数返回的数据值引用可引起该错误。如应用程序通过代码处理错误,请确保程序将检查错误-61219。