在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > VxWorks下數(shù)據(jù)采集卡驅(qū)動(dòng)程序開(kāi)發(fā)

            VxWorks下數(shù)據(jù)采集卡驅(qū)動(dòng)程序開(kāi)發(fā)

            作者:楊 揚(yáng),楊智慧,李 序,李正熙 時(shí)間:2008-06-16 來(lái)源:現(xiàn)代電子技術(shù) 收藏

              1 引 言

            本文引用地址:http://www.biyoush.com/article/84271.htm

              隨著技術(shù)的發(fā)展,廣泛應(yīng)用于現(xiàn)場(chǎng)設(shè)備中。本文根據(jù)實(shí)際項(xiàng)目需求,開(kāi)發(fā)了卡在操作系統(tǒng)下的驅(qū)動(dòng)程序,以方便應(yīng)用程序開(kāi)發(fā)。

              本文采用的卡為盛博協(xié)同公司基于PC/104總線(xiàn)的ADT700采集卡,他通過(guò)總線(xiàn)與PC/104系統(tǒng)構(gòu)成一個(gè)高性能的數(shù)據(jù)采集與控制系統(tǒng)。ADT700具有如下特點(diǎn):

              模擬輸入 16單端/8差分輸入;12位分辨率;100 kHz最大A/D采樣率;0~+10 V,-5~+5 V,-10~+10 V雙極性或單極性輸入量程;1,2,4,8倍可編程增益;DMA實(shí)現(xiàn)數(shù)據(jù)的高速傳輸。

              模擬輸出 4通道輸出;-5~+5 V,-10~+10 V,0~5 V,0~10 V量程可選;通道單獨(dú)置數(shù)或4通道同時(shí)置數(shù)。

              數(shù)字量I/O 可編程外圍接口,24通道TTL/CMOS兼容;I/O接口上拉或下拉限流電阻。

              定時(shí)/計(jì)數(shù)器 6個(gè)16位、10 MHz(最大)定時(shí)/計(jì)

              2 及其字符設(shè)備驅(qū)動(dòng)

              是一個(gè)基于搶占式的實(shí)時(shí)操作系統(tǒng),他以其高度的可靠性、優(yōu)秀的實(shí)時(shí)性、靈活的可裁性廣泛應(yīng)用到許多行業(yè)中。在VxWorks中,I/O系統(tǒng)提供了與設(shè)備無(wú)關(guān)的用戶(hù)接口,應(yīng)用程序可以通過(guò)標(biāo)準(zhǔn)的接口函數(shù)如:create(),remove(),open(),close(),read(),write(),ioctl()等來(lái)訪(fǎng)問(wèn)設(shè)備驅(qū)動(dòng)程序,而不用關(guān)心驅(qū)動(dòng)程序是如何實(shí)現(xiàn)的。ADT700屬于字符型設(shè)備,他的驅(qū)動(dòng)程序需要支持以上接口函數(shù)。

              下面以字符設(shè)備中open()操作為例,說(shuō)明字符設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)。

              如圖1所示,當(dāng)應(yīng)用程序調(diào)用fd=open("/xx0",ORDONLY,0)時(shí),I/O系統(tǒng)根據(jù)文件名"/xx0"在設(shè)備列表中查找設(shè)備(設(shè)備是以文件形式存在的,文件名即設(shè)備名)(如①所示);查找到相應(yīng)設(shè)備后根據(jù)驅(qū)動(dòng)號(hào)定位到驅(qū)動(dòng)表中(如②所示);I/O系統(tǒng)在文件描述表中預(yù)留一個(gè)表項(xiàng)fd=3(如③所示);然后I/O系統(tǒng)調(diào)用驅(qū)動(dòng)程序中的xxoOpen()函數(shù),返回需要保留的值,即設(shè)備描述指針(如④所示);I/O系統(tǒng)將驅(qū)動(dòng)號(hào)和驅(qū)動(dòng)返回值填到文件描述符表中(如⑤所示);最后,I/O系統(tǒng)返回新opeh()的文件在文件描述符表中的索引,應(yīng)用程序得到文件描述符fd=3(如⑥所示)。用戶(hù)可以通過(guò)操作文件來(lái)訪(fǎng)問(wèn)I/O設(shè)備。

              3驅(qū)動(dòng)實(shí)現(xiàn)

              3.1 功能分類(lèi)

              ADT700具有A/D,D/A轉(zhuǎn)換,數(shù)字I/O,定時(shí)/計(jì)數(shù)等功能,對(duì)其進(jìn)行分析,可分為3類(lèi):

              (1)A/D轉(zhuǎn)換為只讀,而D/A轉(zhuǎn)換為只寫(xiě);
              (2)數(shù)字I/O既可讀又可寫(xiě);
              (3)定時(shí)/計(jì)數(shù)器基本無(wú)需讀寫(xiě),只設(shè)置即可。

              根據(jù)以上功能,得出需要實(shí)現(xiàn)3個(gè)驅(qū)動(dòng),分別為:

              (1)adtDrv驅(qū)動(dòng),用于讀入A/D轉(zhuǎn)換后的數(shù)據(jù),寫(xiě)出D/A轉(zhuǎn)換的數(shù)據(jù),設(shè)備描述符為"/adt";
              (2)ppiDrv驅(qū)動(dòng),用于讀入或?qū)懗鰯?shù)字I/O的數(shù)字,設(shè)備描述符為"/ppi";
              (3)pitDrv驅(qū)動(dòng),用于設(shè)置定時(shí)/計(jì)數(shù)器,設(shè)備描述符為"/pit"。

              3.2基本流程

              (1)安裝驅(qū)動(dòng)

              I/O系統(tǒng)的功能是將用戶(hù)的I/O請(qǐng)求轉(zhuǎn)換成對(duì)相應(yīng)驅(qū)動(dòng)程序具體操作函數(shù)的調(diào)用,他通過(guò)維護(hù)一個(gè)包括所有驅(qū)動(dòng)程序操作函數(shù)的地址表來(lái)實(shí)現(xiàn)的。通過(guò)調(diào)用ios-DrvInstall()可以動(dòng)態(tài)安裝驅(qū)動(dòng)程序,該函數(shù)的參數(shù)就是7種基本I/O操作函數(shù)指針。iosDrvInstall()函數(shù)將這些地址寫(xiě)入驅(qū)動(dòng)表中的一塊空閑存儲(chǔ)區(qū)中,并返回這塊存儲(chǔ)區(qū)的編號(hào),編號(hào)即驅(qū)動(dòng)程序號(hào),可被與驅(qū)動(dòng)程序相關(guān)聯(lián)的設(shè)備使用。iosDrvInstall()的原型是:

              int iosDrvtnstall(FUNCPTR pCreate,F(xiàn)UNCPTRpDelete, FUNCPTR pOpen, FUNCPTR pClose,F(xiàn)UNCPTR pRead,F(xiàn)UNCPTR pWrite,F(xiàn)UNCPTR pI-octl);

              當(dāng)調(diào)用iosDrvInstall()注冊(cè)I/O函數(shù)成功后,在shell下用iosDrvShow命令可以觀察驅(qū)動(dòng)表中ADT700的驅(qū)動(dòng)入口。

              (2)創(chuàng)建設(shè)備

              創(chuàng)建設(shè)備過(guò)程即是調(diào)用設(shè)備創(chuàng)建函數(shù)iosDevAdd()將此設(shè)備加入到I/O系統(tǒng)的設(shè)備列表中。iosDevAdd()的原型為:

              STATUS iosDevAdd(DEV_HDR*pDevHdr,char*name,int drvnum);

              其中:DEV_HDR是一個(gè)指向該設(shè)備的描述符指針;而DEV_HDR結(jié)構(gòu)中的第一項(xiàng)則指向下一個(gè)設(shè)備的描述符指針。

              設(shè)備創(chuàng)建成功后,在shell下用devs命令可以觀察設(shè)備列表中ADT700的設(shè)備描述符。

              以ADT700中adtDrv驅(qū)動(dòng)為例,以上兩步的完成過(guò)程如圖2所示。

              (3)實(shí)現(xiàn)I/O函數(shù)

              安裝驅(qū)動(dòng)和創(chuàng)建設(shè)備完成后,就需要實(shí)現(xiàn)I/O函數(shù),即填充驅(qū)動(dòng)表中的函數(shù)了。對(duì)于字符型設(shè)備而言,打開(kāi)設(shè)備操作與創(chuàng)建設(shè)備操作通常使用相同的函數(shù),底層驅(qū)動(dòng)中都用xxOpen()完成;而設(shè)備驅(qū)動(dòng)一旦安裝,就無(wú)需刪除,remove()無(wú)效,因此在底層驅(qū)動(dòng)中xxRemove()為空。下面給出了ppiDrv驅(qū)動(dòng)中ppiRead()的實(shí)現(xiàn)模板。
             
                   
                   

              完成以上3步,就基本實(shí)現(xiàn)了驅(qū)動(dòng)程序,此時(shí),在應(yīng)用程序中可以用標(biāo)準(zhǔn)接口函數(shù)進(jìn)行操作了。以打開(kāi)ADT700中定時(shí)/計(jì)數(shù)器(驅(qū)動(dòng)為pitDrv)為例。
                   
              此時(shí),在shell用iosFdShow命令可以觀察到新創(chuàng)建的文件描述符"/pit/timer"。

              4 結(jié) 語(yǔ)

              本文以數(shù)據(jù)采集卡驅(qū)動(dòng)程序?yàn)槔敿?xì)介紹了Vx-Works操作系統(tǒng)下字符設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)過(guò)程。本驅(qū)動(dòng)程序封裝了ADT700幾乎所有功能,支持標(biāo)準(zhǔn)的I/O系統(tǒng)接口函數(shù)。用戶(hù)可將ADT700當(dāng)作文件,只需定義文件名建立文件描述符,而無(wú)需關(guān)心底層實(shí)現(xiàn),即可完成對(duì)他的操作,從而縮短了應(yīng)用程序開(kāi)發(fā)時(shí)間,提高了效率。

            linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)


            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉