国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

在Windows環境下調用動態庫實現VXI嵌入式計算機間的數據傳遞

發布時間:2010-9-1 14:11    發布者:conniede
關鍵詞: VXI , Windows環境 , 數據傳遞
引 言

在VXI系統中,控制器可以選用各種流行的控制機和操作系統。嵌入式控制機無疑是一種很好的選擇。但在一些由VXI組成的大型、復雜系統中,往往一臺計算機無法完成所有的任務,因此需要多臺機器之間配合完成,各自負責處理部分任務,因此如何傳遞彼此間的實時性數據顯得十分重要。本文介紹在一個VXI機箱插入兩個嵌入式計算機,其中一臺作為零槽控制器,另一臺作為一個模塊,兩者之間可以快速、有效地相互交換各自處理的實時性數據。選用的環境是Windows 2000操作系統,Agilent E8401A VXI主機箱一個,NI VXIpc-872B嵌入式計算機兩臺。采用的方法是共享存儲器通信和事件回調機制。

共享存儲器通信

VXI總線的通信方式很多,其中共享存儲器通信是對VXI總線字串行通信的補充。這些協議將使用少量的輔助操作而傳遞大量的信息,而這些輔助操作正是字串行協議所需要的。VISA提供了兩種不同的方式用于直接對寄存器編程:高級存儲器函數或低級存儲器函數。高級存儲器函數允許通過簡單的函數調用訪問接口上的存儲器,這不需要把存儲器映射到窗口。使用高級存儲器函數可完成存儲器映射和直接存儲器訪問。由于此函數包含了存儲器空間的映射和直接寄存器訪問,這就增加了程序的執行時間。和高級存儲器函數一樣,低級存儲器函數允許直接訪問接口上的內存,但是,調用低級存儲器函數時,必須用低級存儲器函數對地址和被訪問的寄存器進行映射。在使用低級存儲器函數時,為了提高程序的執行速度,低級存儲器函數不返回錯誤代碼。

使用事件和句柄

事件是需要引起應用程序注意的特殊事件。事件類型包括服務請求、中斷和硬件觸發。只有當適當的事件允許時,事件才能被傳送。當事件發生時,有兩種方式應引起注意:

1. 用viInstallhandler安裝事件,用viEnableEvent使能一個或多個事件。如果事件以句柄的形式使能,當指定的事件發生時,指定的事件句柄就被調用。這種方式被叫作回調方式。

2. 使用viEnableEvent使能一個或幾個事件并且調用viWaitOn Event函數。viWaitOn Event函數將掛起執行程序,直到指定的事件發生或到達指定的超時值。這種方式被叫做排隊方式。

這兩種方式是彼此獨立的,在同一時間可以使用一種或兩種同時使用。回調方式通常用來處理需要立即反應的事件,排隊方式用來處理非緊急事件。為了滿足實時性的要求,本文采用回調的方式。

動態鏈接庫的設計與實現

為了提高動態鏈接庫的效率,選用動態鏈接庫中的函數的原則如下:

1. 不同的函數按功能分類,如初始化通信環境、傳送數據、釋放系統資源、實用函數(事件回調函數)等。

2. 保持函數之間一定的獨立性。

3. 如果一個功能由數個函數執行,應該簡化命令序列。

4. 使函數總數目最少。

整個動態鏈接庫中函數按照功能可分為初始化和數傳兩類。初始化類包括初始化通信函數和釋放系統資源函數;數傳類包括傳送數據函數和實用函數。

在初始化通信函數中,首先應在兩個模塊的進程中各自打開自己的一個會話。在對接口存儲器進行映射之前先要進行存儲器分配,然后從指定的地址偏移量處進行端口映射,本文采用的是A24地址映射方式。當調用數據傳遞函數傳遞完數據后還應該通知對方接收數據,本文采用的是VXI總線觸發的方式來通知數據傳遞,因此在初始化函數中還應該使能一個事件,指定觸發方式。

數據傳遞函數負責處理數據的傳遞。這里需要注意的是使用存儲器映射函數只能傳遞8位、16位和32位無符號整數,所以必須通過軟件編寫進行數據格式的轉換。

實用函數主要是指在初始化通信函數中使能的事件所對應的回調函數。此函數的作用是監聽并接收數據。如果監聽到的是指定的觸發,就通過存儲器映射函數將數據讀出來,經過一定的數據格式轉換還原出原始數據,之后向主線程發送消息,通知數據已經接收到。主線程使用線程間通信的方法將數據接收并進行相應的處理。從而整個數據的傳遞過程結束。

下面是動態鏈接庫主要函數實現的方法

void InitCommunication (DWORD thrdid) file:/初始化通信環境
{
&nb sp; .
.
.
viInstallHandler (vi,VI_EVENT_TRIG,myHdlr, (ViAddr)10); file:/聲明一個回調函數
viEnableEvent (vi,VI_EVENT_TRIG,VI_HNDLR, VI_NULL); file:/使能一個事件
viMemAlloc(vi,0x200,&offset);
file:/分配一塊內存
viMapAddress(vi,VI_A24_ SPACE,0, 0X200,VI_FALSE,VI_ NULL,&addr); file:/映射地址
.
.
.
}
void Senddata(unsigned short data2) file:/數據傳遞函數
{
viPoke16(vi,addr,data2);
viAssertTrigger (vi,VI_TRIG_PROT_SYNC);
}
ViStatus _VI_FUNCH myHdlr(ViSession vi,ViEventType eventType,ViEvent ctx,ViAddr userHdlr) file:/事件回調函數
{
viGetAttribute(ctx,VI_ATTR_ RECV_TRIG_ID,&trigId);
file:/得到觸發id
switch(trigId)
{
case VI_TRIG_TTL0: file:/判斷是否TTL0的觸發
viPeek16(vi,addr,&a);
break;
.
.
.
}

通過在程序中調用上面的Senddata函數可以實現一個unsigned short型數據的傳遞。當需要傳遞多個數據時,建議使用結構體定義要傳遞的數據。

結 語

本文通過對VXI共享存儲器通信和處理事件機制的介紹,闡述了如何在Windows環境下通過動態鏈接庫實現兩塊嵌入式計算機之間的數據傳遞,其中有關VISA函數的細節在HP或NI提供的VISA幫助中有詳盡的說明,不再贅述。基于這種方法編寫出來的程序處理VXI零槽控制器和非零槽模塊之間的通信問題是比較合適的。
本文地址:http://m.qingdxww.cn/thread-25037-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 更佳設計的解決方案——Microchip模擬開發生態系統
  • 想要避免發生災難,就用MPLAB SiC電源仿真器!
  • Cortex-M4外設 —— TC&TCC結合事件系統&DMA優化任務培訓教程
  • 利用模擬開發工具生態系統進行安全電路設計
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品视频免费在线观看 | 久久成人精品视频 | 亚洲综合色就色手机在线观看 | 在线一区视频 | 一级特黄女人生活片 | 精品欧美高清不卡在线 | 国产精品中文字幕在线观看 | h成人口工动漫在线看网站 h成人动漫 | 99热成人精品国产免国语的 | 亚洲91av| 欧美 日韩 国产 色 欧美 日韩 成人 | 国产在线观看青草视频 | 91最新免费地址入口 | 成人中文网 | 天天久久狠狠伊人第一麻豆 | 四虎影院永久在线 | 久久精品国产99国产精品免费看 | 成年男女的免费视频网站 | 亚洲一区二区三区深夜天堂 | 奇怪的美发沙龙973 妻子的诱惑中文版在线免费观看 | 久热国产在线 | 69成年网| 日韩欧美中文字幕一区二区三区 | 欧美成人性色生活片免费在线观看 | 真正免费一级毛片在线播放 | 久久久久九九 | 日韩在线一区二区三区视频 | 久久99热这里只有精品高清 | 国产欧美日韩在线一区二区不卡 | 精品国产不卡一区二区三区 | 四虎最新入口 | 年轻的馊子hd中文播放 | 久草成人在线视频 | 亚洲观看视频 | 国产黄色片网站 | 日本大片免aaa费观看视频 | 国产成人综合亚洲亚洲欧美 | 日韩精品一区二区三区在线观看 | 黄页大全在线观看 | 国产手机视频在线观看 | 奇淫三国|