使用NI-DAQ Text API进行带缓存的DSA采集时数据类型是怎样的?



主要软件: Driver Software>>NI-DAQ
主要软件版本: 7.2
主要软件修正版本: N/A
次要软件: N/A
硬件: Modular Instruments>>Dynamic Signal Acquisition and Analysis (DSA)

问题:

我使用NI-DAQ 基于文本的API函数进行一个动态信号分析仪板卡(DSA)带缓存的模拟输入工作。所有进入DAQ数据数组缓存的函数都有一个数据类型标识为I16的缓存数组。例如,NI-DAQ中SCAN_Start 函数的函数参考原型是:

status = SCAN_Start (deviceNumber, buffer, count, sampTimebase, sampInterval, scanTimebase, scanInterval)

"buffer"这一参数的数据类型是I16,一个短型整数。然而在传统的NI-DAQ(Legacy) C Function Reference Help中,写到“只对DSA设备而言,buffer 应该是一个i32的数组。这些DSA设备返回一个32位的数据,该32位的数据位是最重要的位数”。到底哪个才是正确的缓存数组类型,I16还是I32?



解答:

当对DSA设备应用NI DAQ驱动中的基于文本的API编写程序时,缓存大小必须是一个4个字节的边界。如果该缓存被分配成一个I32的数组,它必须将类型转换成一个I16的指针,这个指针用于将该数组的地址传递给SCAN_Start。如果这个缓存被分配成一个双倍I16数组大小的数组,使用者在将这个buffer传递给SCAN_Start之前,必须首先检查这个缓存是否与一个4字节边界对齐。

当你在声明一个缓存数组时,数组类型必须选为I32.在C语言中,一个静态声明应该如下所示:


static i32 buffer[10000];


如果你更喜欢使用动态声明来动态的分配内存,你可以使用下列代码来声明一个指针并分配这个缓存buffer的空间:

static i32 *buffer;
buffer= (i32 *) malloc (sizeof(i32)*bufferSize);

然后,当使用NI-DAQ驱动函数调用这个缓存数组时,你必须通过类型转换将这个I32数据转成I16的类型。有许多的API函数需要这么做,包括SCAN_Start,DAQ_Montior, 和 DAQ_DB_Transfer。在使用SCAN_Start 调用时,你需要使用以下代码来转换I32数据类型的buffer:


SCAN_Start (iDevice, (i16 *) buffer, bufferSize, 0, 0, 0, 0);

请注意,在这个调用中采样时基,采样间隔和扫描时基参数都要设为0。当使用DSA设备时,扫描速率应该通过DAQ_Set_Clock function来设定。



相关链接:
Using the text above as a reference, please enter your edited text below:


附件:





报告日期: 12/22/2000
最近更新: 10/09/2011
文档编号: 24L9QC2L