通过VXI-USB控制器调用需要大量内存空间的VISA API函数产生BSOD错误



主要软件:
主要软件版本: 3.8
主要软件修正版本: N/A
次要软件: N/A

问题:

我使用VXI-USB控制器和VISA的API指令函数(viSetBuf) 来预留大量内存空间,但当我调用viScanf or viRead 的API指令函数从我的设备读取数据时,电脑出现蓝屏。

为什么会这样?



解答:

这是由于NI VXI-USB控制器与NI-VXI驱动引起的。

VISA的API函数命令viSetBuf将为用户预留其指定的内存大小。当需要的内存大小超过了电脑允许的范围,默认状态下操作系统将分配4KB的内存空间。当用户调用viScanf或者viRead函数时,VXI驱动将分配同样大小的非分页内存(Nonpaged Memory)作为数据缓存。但是当VXI不能分配这个内存时,计算机将出现蓝屏,这是由于驱动不能正确处理错误造成的。

为了避免以上的问题,必须保证利用viSetBuf预留的内存空间小于计算机允许的非分页内存(Nonpaged memory)大小。在Windows操作系统下,通过Windows任务管理器(Windows Task Manager)的性能(Performance)选项卡查看到计算机可用的非分页内存(Nonpaged memory)大小。如下图所示



相关链接: Developer Zone Tutorial: Five Things to Consider When Choosing a VXI Controller
KnowledgeBase 41ECFUD2: Current NI-VXI Driver Versions
KnowledgeBase 3RHHHNIM: How Can I Create a Kernel Memory Dump When Windows Crashes

附件:


TaskMan.jpg - TaskMan.jpg


报告日期: 03/16/2011
最近更新: 09/13/2011
文档编号: 5JF9RH9K