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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > VxWorks下的同類USB設(shè)備管理方法

          VxWorks下的同類USB設(shè)備管理方法

          作者: 時間:2013-10-08 來源:網(wǎng)絡(luò) 收藏


            在讀寫設(shè)備時??梢栽O(shè)備號作為設(shè)備的標識,并通過設(shè)備號在nodeld數(shù)組中得到設(shè)備的nodeId,再從設(shè)備列表中查找到具體的物理設(shè)備的描述符。從而得到設(shè)備資源并對設(shè)備進行訪問。以LM9833讀設(shè)備為例,其讀設(shè)備原型代碼如下:


            其中,usbScanRead()是驅(qū)動程序向用戶應(yīng)用程序提供的接口函數(shù),直接調(diào)用該函數(shù)即可讀取設(shè)備,其它的設(shè)備函數(shù)也是如此,其中設(shè)備號dev是由用戶根據(jù)不同設(shè)備的不同Product ID(PID)號制定的,這樣,當設(shè)備接入系統(tǒng)時,驅(qū)動程序就會根據(jù)其PID號判斷其設(shè)備號,并將該設(shè)備的nodeld值存放于數(shù)組的特定位置。由于此時設(shè)備始終處于就緒狀態(tài),用戶可以隨時對設(shè)備進行讀寫操作,而并不存在打開設(shè)備的操作。

            讀寫設(shè)備時,首先要根據(jù)設(shè)備號dev從設(shè)備列表中查找出設(shè)備,并將其定位到具體的設(shè)備描述符上。在查找設(shè)備時,遍歷設(shè)備列表,就可找到節(jié)點設(shè)備描述符中nodeId與usbd_node_id[dev]相匹配的設(shè)備描述符結(jié)構(gòu)體,并返回該結(jié)構(gòu)體,然后再由設(shè)備描述符結(jié)構(gòu)體得到設(shè)備的資源信息,從而實現(xiàn)對設(shè)備的讀寫。圖6所示是查找設(shè)備的一個簡單流程。


            該方法屏蔽了復(fù)雜的驅(qū)動程序列表和文件描述符表,從而提供了一種快速定位和訪問設(shè)備的方法。這種方法在專用的系統(tǒng)中,對設(shè)備的訪問是非常高效的,但不具有通用性,也就是說,對于不同類別的設(shè)備。則需要另外一套同樣的機制來實現(xiàn)。

            3 結(jié)束語

            本文提出了一種獨立于 I/O系統(tǒng)的USB方法。該方法也是一種獨立于I/O系統(tǒng)的USB設(shè)備驅(qū)動程序設(shè)計模式,它對于在專用系統(tǒng)中設(shè)備的管理是非常有效的。通過對USB設(shè)備描述符、設(shè)備列表、以及應(yīng)用程序訪問設(shè)備流程的設(shè)計,可以成功實現(xiàn)獨立于I/O系統(tǒng)的方法。這一種方法可以利用驅(qū)動程序直接向應(yīng)用系統(tǒng)提供接口函數(shù)和nodeld數(shù)組。從而摒棄了I/O系統(tǒng)中復(fù)雜的驅(qū)動程序列表和文件描述符等概念。目前,這種獨立于 I/O系統(tǒng)的USB方法已在某大型掃描儀中得到應(yīng)用,并取得了一定的經(jīng)濟效益。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: VxWorks 同類USB 設(shè)備管理

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁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); })();