<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          QQ截圖20120514143511.jpg

          因為沿用了在Pascal語言中調用在DLL程序驅動的習慣,當用戶在Labwin的環(huán)境調用用戶定義函數(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測試程序中的應用實例

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

          在BC3192的測試程序中,結合Labwin自帶的VXI總線的設備,編寫了一個簡單的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內建解釋器對程序進行解釋,其效率遠不如直接使用動態(tài)鏈接庫方便。用VC編譯器編譯的動態(tài)鏈接文件,可以在Labwin的函數(shù)中方便地進行調用。而且其效率同VC自身的調用不相上下。

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

          voidFARPASCAL__export__loaddsReadReg(UINTLa,UINTOffset,UINTFAR*Data)

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

          {

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

          /*gettheaddresspointer*/

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

          /*readregister*/

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

          /*freetheselector*/

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

          }

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

          6結論

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


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();