新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > LabWindows/CVI儀器驅(qū)動程序的開發(fā)

LabWindows/CVI儀器驅(qū)動程序的開發(fā)

作者: 時間:2012-05-14 來源:網(wǎng)絡(luò) 收藏

QQ截圖20120514143511.jpg

因為沿用了在Pascal語言中調(diào)用在DLL程序驅(qū)動的習(xí)慣,當(dāng)用戶在Labwin的環(huán)境調(diào)用用戶定義函數(shù)時,把宏_VI_FUNC(表示任何用戶函數(shù))翻譯成_pascal,而使用外部編譯器編譯時,則把宏解釋成_far_pascal_export。同樣在Labwin中,_VI_FAR(表示用戶函數(shù)中任何的數(shù)組參數(shù)和輸出變量)被翻譯成空,而用其它編譯程序時,被翻譯成_far。

如下面這個函數(shù):

ViStatus_VI_FUNCtek2430a_read_waveform(ViSessioninstrSession,

ViReal64_VI_FARwvfm[],

ViReal64_VI_FAR*xin,

ViReal64_VI_FAR*trig_off);

環(huán)境時,表示為:

ViStatus_pascaltek2430a_read_waveform(ViSessioninstrSession,

ViReal64wvfm[],

ViReal64*xin,

ViReal64*trig_off);

而在其它編譯環(huán)境下,表示為:

ViStatus_far_pascal_exporttek2430a_read_waveform(ViSessioninstrSession,

ViReal64_farwvfm[],

ViReal64_far*xin,

ViReal64_far*trig_off);

5在BC3192測試程序中的應(yīng)用實例

VXI的設(shè)備包括以下幾個主要功能。首先是分配設(shè)備的地址指針,這需要定義動態(tài)鏈接庫的代碼段和數(shù)據(jù)段為可移動和可刪除,因為要用基指針指向每一個I/O動作,所以代碼段和數(shù)據(jù)段是不定的;其次是VXI總線寄存器的寫入和讀取動作,這些操作需要我們使用剛得到的設(shè)備地址指針;再次是向緩存中讀取和寫入信息。另外,還有初始化,以及系統(tǒng)固定延遲時間等一系列功能。

在BC3192的測試程序中,結(jié)合Labwin自帶的VXI總線的設(shè)備,編寫了一個簡單的VXI。它存于程序的根目錄中,有4個支持文件,分別是vxirw.c、vxirw.dll、vxirw.h以及vxirw.lib。在我們的程序中,由于考慮到工作的效率,決定使用在VisualC++1.5的編譯環(huán)境下,編譯vxirw.c和vxirw.h程序,生成vxirw.dll及vxirw.lib的高效方法。這是由于Labwin使用一種LCC內(nèi)建解釋器對程序進行解釋,其效率遠(yuǎn)不如直接使用動態(tài)鏈接庫方便。用VC編譯器編譯的動態(tài)鏈接文件,可以在Labwin的函數(shù)中方便地進行調(diào)用。而且其效率同VC自身的調(diào)用不相上下。

如下面代碼所示,正是使用了剛才所表示的函數(shù)調(diào)用方法。

voidFARPASCAL__export__loaddsReadReg(UINTLa,UINTOffset,UINTFAR*Data)

/*這是用于讀取總線寄存器的函數(shù)。*/

{

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

/*gettheaddresspointer*/

GetPointer(La);/*調(diào)用La全局變量取得寄存器地址*

/*readregister*/

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

/*freetheselector*/

FreeSelector(wSelector);/*釋放在取寄存器的值時所用到的字選擇臨時變量。*/

}

程序的調(diào)用要熟悉大量硬件的特性,不屬于軟件總體設(shè)計之列,在此不再介紹。

6結(jié)論

Labwindows這種以C語言為中心的編程方式有其優(yōu)勢,所帶的C語言的功能比較靈活,而又便于一些大型的工程。它的類庫的功能又可以開放地進行擴充,使系統(tǒng)的功能得到進一步增強。相對地,新型編程方式只能在固定的自帶環(huán)境中運行,而且在表達(dá)復(fù)雜關(guān)系時,流程圖的聯(lián)系方式有很大的局限性。所以,Labwindows的編程方式在一段時間內(nèi)將仍然擁有其地位。而今后的發(fā)展很可能是把兩種編程方法進行集成,使我們在建立流程圖后可以生成大部分程序代碼,而細(xì)微的地方又可以進行C語言的調(diào)整。這樣,我們的編程人員將擁有更方便的編程工具。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉