亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        VxWorks 中低速串行設(shè)備驅(qū)動的層次化設(shè)計方法

        2013-08-16 01:07:50曾勇
        關(guān)鍵詞:層次化驅(qū)動程序調(diào)用

        曾勇

        (中國西南電子技術(shù)研究所,四川 成都 610036)

        隨著通信技術(shù)的發(fā)展,低速串行設(shè)備動態(tài)擴(kuò)展和多低速串行設(shè)備全雙工通信技術(shù)在嵌入式領(lǐng)域的應(yīng)用越來越廣泛。利用現(xiàn)場可編程門陣列FPGA(Field Programmable Gates Army)完全可以將若干接口電路的功能集成到一片F(xiàn)PGA中,這不僅具有集成度高、體積小和功耗低等優(yōu)點(diǎn),而且還具有用戶可編程能力,同時還可實(shí)現(xiàn)整個系統(tǒng)的功能重構(gòu)以及項目過程中一些特殊低速串行設(shè)備傳輸方式,這是專用低速串行設(shè)備實(shí)現(xiàn)芯片所不具備的功能。

        嵌入式系統(tǒng)一般采用PowerPC+FPGA的架構(gòu)方式,F(xiàn)PGA主要完成底層接口協(xié)議處理,PowerPC的任務(wù)主要實(shí)現(xiàn)控制功能。FPGA與PowerPC通過內(nèi)部總線(Local Bus)方式連接,F(xiàn)PGA實(shí)現(xiàn)基于總線的時序操作;采用內(nèi)存映射方式,F(xiàn)PGA實(shí)現(xiàn)的多個低速串行設(shè)備的設(shè)置、操作寄存器以及FIFO的入口出口映射為PowerPC可尋址的一段內(nèi)存空間,根據(jù)系統(tǒng)設(shè)計方法采用中斷復(fù)用方式或者使用多個Po werPC中斷號。

        在驅(qū)動程序傳統(tǒng)開發(fā)過程中,F(xiàn)PGA實(shí)現(xiàn)的多個低速串行設(shè)備驅(qū)動程序的設(shè)計不受驅(qū)動體系約束,只是簡單地根據(jù)上層應(yīng)用的需求提供接口,導(dǎo)致應(yīng)用程序代碼可移植性、可讀性差,開發(fā)流程并行度不高,層次性不明確。實(shí)際調(diào)試過程中則需要應(yīng)用程序人員、驅(qū)動開發(fā)人員同時對各自的程序進(jìn)行修改、重新編譯。

        本文在原有工程基礎(chǔ)上對FPGA驅(qū)動程序進(jìn)行了更改、封裝,實(shí)現(xiàn)了基于FPGA的多個低速串行設(shè)備在VxWorks系統(tǒng)的標(biāo)準(zhǔn)I/O設(shè)備驅(qū)動,并在此基礎(chǔ)上提出了一種低速串行設(shè)備驅(qū)動層次化設(shè)計方法。

        1 低速串行設(shè)備驅(qū)動程序設(shè)計

        在VxWorks中,串行設(shè)備是一種特殊字符設(shè)備。與字符設(shè)備不同的是,串行設(shè)備的驅(qū)動程序并不是直接掛在I/O系統(tǒng)中,而是通過虛擬設(shè)備ttyDrv來使用[1]。ttyDrv與I/O系統(tǒng)以及真實(shí)驅(qū)動程序之間的關(guān)系如圖1所示。

        圖1 ttyDrv與I/O系統(tǒng)以及真實(shí)驅(qū)動程序關(guān)系

        ttyDrv和 tyLib實(shí)現(xiàn)了以下的功能[2]:(1)I/O 系統(tǒng)請求 (在驅(qū)動表中增加入口函數(shù),創(chuàng)建設(shè)備描述符等);(2)管 理 I/O系 統(tǒng) 的 入 口 函 數(shù) , 如 tyOpen,ttyIoctl,tyRead,tyWrite等;(3)管理 selectLib 的調(diào)用;(4)管理數(shù)據(jù)緩沖區(qū)以及緩沖區(qū)上的線程同步互斥;(5)ttyDrv處理 open 和 ioctl操 作 (ttyOpen and ttyIoctl);(6)tyLib 處理 read和write操作(tyRead and tyWrite)。

        真實(shí)的低速串行設(shè)備驅(qū)動函數(shù) (xxDrv)通過ttyDrv安裝的回調(diào)函數(shù)在I/O系統(tǒng)和設(shè)備之間移動數(shù)據(jù);tyLib提供了 2個回調(diào)函數(shù)(tyITx和 tyIRd)。

        1.1 標(biāo)準(zhǔn)驅(qū)動程序的構(gòu)造

        SIO_DRV_FUNCS結(jié)構(gòu)體是串行設(shè)備驅(qū)動程序的一個重要的組成部分,它是驅(qū)動函數(shù)的入口,在串行設(shè)備的驅(qū)動程序中必須要有一個包含指向SIO_DRV_FUNCS指針的結(jié)構(gòu) (xx_CHAN),xx_CHAN包含了 xxDrv中所需要的設(shè)備特定信息,以及提供給高層函數(shù)的底層操作函數(shù);由于系統(tǒng)不知道驅(qū)動函數(shù)中所使用的數(shù)據(jù)結(jié)構(gòu),VxWorks提供了一個數(shù)據(jù)結(jié)構(gòu)SIO_CHAN來進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換[3]。SIO_CHAN結(jié)構(gòu)僅定義了一個指向SIO_DRV_FUNCS結(jié)構(gòu)體的指針。

        FPGA實(shí)現(xiàn)的多個低速串行設(shè)備驅(qū)動程序的結(jié)構(gòu)構(gòu)造實(shí)例如下:

        1.2 驅(qū)動函數(shù)和回調(diào)函數(shù)的掛接

        ttyDrv通過SIO_DRV_FUNCS提供的入口對 xxDrv的服務(wù)進(jìn)行訪問,xxDrv通過回調(diào)函數(shù)來訪問ttyDrv提供的服務(wù)[4]。xxDrv驅(qū)動函數(shù)在 SIO_DRV_FUNCS中的掛接實(shí)例如下:

        1.3 驅(qū)動程序標(biāo)準(zhǔn)操作函數(shù)的實(shí)現(xiàn)

        1.3.1 標(biāo)準(zhǔn)寫函數(shù)

        標(biāo)準(zhǔn)的I/O系統(tǒng)寫函數(shù)write()調(diào)用tyWrite()函數(shù)——ttyDrv加載在驅(qū)動表中的寫入口函數(shù),tyWrite()函數(shù)將數(shù)據(jù)放入環(huán)形緩沖隊列中并調(diào)用驅(qū)動函數(shù)fpgaTxStartup()發(fā)起一次傳輸過程。write函數(shù)的調(diào)用關(guān)系如圖2所示。

        圖2 write函數(shù)的調(diào)用關(guān)系

        1.3.2 標(biāo)準(zhǔn)讀函數(shù)

        通過中斷方式從FPGA生成的FIFO出口地址讀取數(shù)據(jù),通過綁定的回調(diào)函數(shù)將數(shù)據(jù)傳送到接收環(huán)形緩沖隊列中,并調(diào)用ttyDrv加載在驅(qū)動表中的讀入口函數(shù)tyRead()驅(qū)動函數(shù),通知阻塞的I/O系統(tǒng)寫函數(shù) read()函數(shù)完成一次傳輸過程。read函數(shù)的調(diào)用關(guān)系如圖3所示。

        圖3 read函數(shù)的調(diào)用關(guān)系

        1.3.3 I/O操作函數(shù)

        標(biāo)準(zhǔn)的 I/O系統(tǒng)寫函數(shù) ioctl()調(diào)用 ttyIoctl()函數(shù),ttyIoctl()函數(shù)調(diào)用 FPGAIoctl()進(jìn)行操作,根據(jù)系統(tǒng)的實(shí)際需要實(shí)現(xiàn)部分設(shè)置項。I/O操作函數(shù)的調(diào)用關(guān)系如圖4所示。

        圖4 I/O操作函數(shù)調(diào)用關(guān)系

        2 低速串行設(shè)備的加載

        (1)根據(jù)實(shí)際需求修改config.h中NUM_TTYS宏;

        (2)參照 sysSerialHwInit()函數(shù)實(shí)現(xiàn) FpgaSerialHwInit(),對NUM_TTYS個低速串行設(shè)備結(jié)構(gòu)體FPGA_CHAN進(jìn)行初始化以及驅(qū)動函數(shù)和回調(diào)函數(shù)的掛接;

        (3)參 照 sysSerialHwInit2 ()函 數(shù) 實(shí) 現(xiàn)FpgaSerialHwInit2(),掛接中斷處理函數(shù) fpgaRcvInt();

        (4)調(diào)用 ttyDevCreate()函數(shù)創(chuàng)建 tty設(shè)備,添加設(shè)備驅(qū)動表,生成環(huán)形數(shù)據(jù)緩沖區(qū),安裝回調(diào)函數(shù)tyITx()和tyIRd()。

        3 低速串行設(shè)備驅(qū)動層次化設(shè)計方法

        在不同的系統(tǒng)設(shè)計中,PowerPC和FPGA硬件連接方式不盡相同,如不同的片選信號、總線上數(shù)據(jù)線高低位的不同接法,中斷管腳接法的不同,導(dǎo)致FPGA實(shí)現(xiàn)的寄存器映射地址及使用的中斷號存在差異;針對不同的應(yīng)用程序和應(yīng)用場所,外部接口對應(yīng)的設(shè)備也會發(fā)生相應(yīng)的變化。以上這些都會破壞程序的獨(dú)立性、設(shè)備無關(guān)性。需要對驅(qū)動程序、應(yīng)用程序進(jìn)行重新編譯、燒寫,不利于版本的管理以及外場設(shè)備的維護(hù)。這是在設(shè)備驅(qū)動設(shè)計中需要考慮的一個問題。

        由此本文提出了一種層次化的低速串行設(shè)備驅(qū)動設(shè)計方法。將驅(qū)動程序的實(shí)現(xiàn)分為三層,硬件分離層、設(shè)備加載層和功能描述層,各自實(shí)現(xiàn)的功能如下:

        (1)硬件分離層:通過XML文件實(shí)現(xiàn)低速串行驅(qū)動程序結(jié)構(gòu)初始化和硬件設(shè)備實(shí)現(xiàn)差異的分離;

        (2)設(shè)備加載層:實(shí)現(xiàn)低速串行設(shè)備在 VxWorks系統(tǒng)的標(biāo)準(zhǔn)I/O設(shè)備驅(qū)動的加載;

        (3)功能描述層:通過XML文件實(shí)現(xiàn)應(yīng)用程序和低速串行設(shè)備之間的映射關(guān)系以及串行設(shè)備功能的描述。

        低速串行設(shè)備驅(qū)動層次化設(shè)計方法流程如圖5所示。

        圖5 低速串行設(shè)備驅(qū)動層次化設(shè)計方法流程

        3.1 層次化設(shè)計驅(qū)動程序的實(shí)現(xiàn)

        嵌入式操作系統(tǒng)中,通常都使用Flash作為主存介質(zhì)。在Flash上建立TFFS文件系統(tǒng),建立文件系統(tǒng)后,類似于在Windows操作系統(tǒng)下對硬盤操作一樣,進(jìn)行數(shù)據(jù)的拷貝、刪除以及文件的建立等操作。XML作為配置文件的主要優(yōu)點(diǎn)是改變參數(shù)配置時不需要改變和重新編譯應(yīng)用程序,只需在XML文件中更改就可以了。TinyXML是一個簡單小巧、且很容易集成到其他程序中的C++XML解析器。即TinyXML解析一個XML文檔并由此生成一個可讀、可修改、可保存的文檔對象模型(DOM)。本文的實(shí)現(xiàn)過程中使用TinyXML對XML文檔進(jìn)行解析。

        低速串行設(shè)備驅(qū)動層次化設(shè)計方法建立在文件系統(tǒng)之上,VxWorks可以動態(tài)地加載用戶程序,并在系統(tǒng)中加入對XML文件進(jìn)行解析和存儲的功能。

        硬件分離層:FpgaSerialHwInit()通過讀取設(shè)備對應(yīng)的BSP_Config.xml文件,對多個低速串行設(shè)備結(jié)構(gòu)體FPGA_CHAN中的各個寄存器地址進(jìn)行初始化以及驅(qū)動函數(shù)和回調(diào)函數(shù)的掛接。

        設(shè)備加載層:實(shí)現(xiàn)標(biāo)準(zhǔn)I/O設(shè)備驅(qū)動的加載。

        功能描述層:應(yīng)用程序通過讀取USER_Config.xml文件,獲取設(shè)備的對外連接狀態(tài)及設(shè)備提供的功能,對多個低速串行設(shè)備read、write以及ioctl等操作。

        通常設(shè)備驅(qū)動人員只需要進(jìn)行對BSP_Config.xml和USER_Config.xml兩個配置文件進(jìn)行修改、更新。

        3.2 XML配置文件的設(shè)計及實(shí)現(xiàn)

        BSP_Config.xml文件格式示例如下:的層次化設(shè)計方法,通過驅(qū)動程序功能分層設(shè)計方式,屏蔽各層的實(shí)現(xiàn)細(xì)節(jié),克服了嵌入式系統(tǒng)開發(fā)過程中,由于設(shè)備驅(qū)動程序的設(shè)計不受驅(qū)動體系約束帶來的程序代碼的可移植性、可讀性差,開發(fā)流程并行度不高,層次性不明確等不足之處;在實(shí)際的工程實(shí)現(xiàn)中節(jié)約了開發(fā)時間,極大地提高了效率。

        [1]Vxworks kernel programmers guide[Z].Wind River Systems Inc,2006.

        [2]Vxworks device driver developers guide[Z].Wind River Systems Inc,2006.

        [3]內(nèi)核示例源代碼[Z].Wind River Systems Inc,2006.

        [4]陳智育,等.VxWorks程序開發(fā)實(shí)踐[M].北京:人民郵電出版社,2004.

        猜你喜歡
        層次化驅(qū)動程序調(diào)用
        面向量化分塊壓縮感知的區(qū)域?qū)哟位A(yù)測編碼
        核電項目物項調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        鐵路傳送網(wǎng)OTN設(shè)備互聯(lián)互通開銷層次化處理研究
        艦船系統(tǒng)間電磁兼容性的層次化優(yōu)化方法
        基于層次化分類器的遙感圖像飛機(jī)目標(biāo)檢測
        利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
        驅(qū)動程序更新與推薦
        驅(qū)動程序更新與推薦
        久久婷婷国产色一区二区三区| 亚洲另类自拍丝袜第五页| 一本一道波多野结衣av中文| 伊人久久婷婷综合五月97色| 日韩人妻中文字幕专区| 日韩aⅴ人妻无码一区二区| 国产一区二区三区四区五区vm| 最新国产美女一区二区三区| 久久精品国产亚洲av久五月天| 超碰97人人射妻| 国内露脸中年夫妇交换| av在线免费观看你懂的| 人妻少妇精品视频专区二区三区 | 在线观看中文字幕不卡二区| 日本孕妇潮喷高潮视频| 国产成人午夜精华液| 亚洲是图一区二区视频| 91精品亚洲熟妇少妇| 亚洲无线一二三四区手机| 国产真实乱人偷精品人妻| 国产精品不卡无码AV在线播放| 香港三级日本三韩级人妇久久| 亚洲熟妇久久精品| 国产亚洲亚洲精品777| 国产女主播在线免费观看| 日本一区二区三区视频在线观看| 手机看片福利一区二区三区| 久久成人永久免费播放| 亚洲一区二区三区精品久久av| 深夜福利啪啪片| 亚洲一区二区三区日本久久九| 亚洲国产精品免费一区| 开心五月婷婷激情综合网| 狠狠色成人综合网| 亚洲人成网站久久久综合| 久草中文在线这里只有精品| 日本真人做人试看60分钟| 久久er国产精品免费观看8| 日韩精品成人一区二区三区| 2018天天躁夜夜躁狠狠躁| 亚洲国产人在线播放首页|