新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > LabWindows/CVI仪器驱动程序的开发

LabWindows/CVI仪器驱动程序的开发

作者: 时间:2012-05-14 来源:网络 收藏

QQ截图20120514143511.jpg

因为沿用了在Pascal语言中调用在DLL程序驱动的习惯,当用户在Labwin的环境调用用户定义函数时,把宏_VI_FUNC(表示任何用户函数)翻译成_pascal,而使用外部编译器编译时,则把宏解释成_far_pascal_export。同样在Labwin中,_VI_FAR(表示用户函数中任何的数组参数和输出变量)被翻译成空,而用其它编译程序时,被翻译成_far。

如下面这个函数:

ViStatus_VI_FUNCtek2430a_read_waveform(ViSessioninstrSession,

ViReal64_VI_FARwvfm[],

ViReal64_VI_FAR*xin,

ViReal64_VI_FAR*trig_off);

环境时,表示为:

ViStatus_pascaltek2430a_read_waveform(ViSessioninstrSession,

ViReal64wvfm[],

ViReal64*xin,

ViReal64*trig_off);

而在其它编译环境下,表示为:

ViStatus_far_pascal_exporttek2430a_read_waveform(ViSessioninstrSession,

ViReal64_farwvfm[],

ViReal64_far*xin,

ViReal64_far*trig_off);

5在BC3192测试程序中的应用实例

VXI的设备包括以下几个主要功能。首先是分配设备的地址指针,这需要定义动态链接库的代码段和数据段为可移动和可删除,因为要用基指针指向每一个I/O动作,所以代码段和数据段是不定的;其次是VXI总线寄存器的写入和读取动作,这些操作需要我们使用刚得到的设备地址指针;再次是向缓存中读取和写入信息。另外,还有初始化,以及系统固定延迟时间等一系列功能。

在BC3192的测试程序中,结合Labwin自带的VXI总线的设备,编写了一个简单的VXI。它存于程序的根目录中,有4个支持文件,分别是vxirw.c、vxirw.dll、vxirw.h以及vxirw.lib。在我们的程序中,由于考虑到工作的效率,决定使用在VisualC++1.5的编译环境下,编译vxirw.c和vxirw.h程序,生成vxirw.dll及vxirw.lib的高效方法。这是由于Labwin使用一种LCC内建解释器对程序进行解释,其效率远不如直接使用动态链接库方便。用VC编译器编译的动态链接文件,可以在Labwin的函数中方便地进行调用。而且其效率同VC自身的调用不相上下。

如下面代码所示,正是使用了刚才所表示的函数调用方法。

voidFARPASCAL__export__loaddsReadReg(UINTLa,UINTOffset,UINTFAR*Data)

/*这是用于读取总线寄存器的函数。*/

{

/**Data=(UINT)(*(pPointer+La*32+Offset/2));*/

/*gettheaddresspointer*/

GetPointer(La);/*调用La全局变量取得寄存器地址*

/*readregister*/

*Data=(UINT)(*(pPointer+Offset/2));/*把寄存器中的值通过偏移地址取出*/

/*freetheselector*/

FreeSelector(wSelector);/*释放在取寄存器的值时所用到的字选择临时变量。*/

}

程序的调用要熟悉大量硬件的特性,不属于软件总体设计之列,在此不再介绍。

6结论

Labwindows这种以C语言为中心的编程方式有其优势,所带的C语言的功能比较灵活,而又便于一些大型的工程。它的类库的功能又可以开放地进行扩充,使系统的功能得到进一步增强。相对地,新型编程方式只能在固定的自带环境中运行,而且在表达复杂关系时,流程图的联系方式有很大的局限性。所以,Labwindows的编程方式在一段时间内将仍然拥有其地位。而今后的发展很可能是把两种编程方法进行集成,使我们在建立流程图后可以生成大部分程序代码,而细微的地方又可以进行C语言的调整。这样,我们的编程人员将拥有更方便的编程工具。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭