<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 實(shí)時(shí)嵌入式操作系統VxWorks設備驅動(dòng)程序的設計

實(shí)時(shí)嵌入式操作系統VxWorks設備驅動(dòng)程序的設計

作者: 時(shí)間:2011-06-10 來(lái)源:網(wǎng)絡(luò ) 收藏


2
為了實(shí)現應用程序的可移植性,將應用程序從直接操作硬件中解放出來(lái),為應用程序操作硬件提供一個(gè)一致的接口。這個(gè)接口就是由的I/O系統提供的。I/O系統將應用程序的I/O請求傳遞給設備專(zhuān)用的I/O函數。這些設備專(zhuān)用的I/0函數就是由設備提供的。本章從功能、接口與結構3個(gè)角度闡述設備。
2.1 設備驅動(dòng)程序的功能
1)對設備進(jìn)行初始化 初始化的目的是使設備處于某種工作狀態(tài),以便用戶(hù)程序訪(fǎng)問(wèn)該設備。
2)打開(kāi)設備操作 打開(kāi)設備操作實(shí)際上是查詢(xún)用戶(hù)指定的設備,并查看用戶(hù)是否可以使用該設備。因為設備是共享資源,當設備正在被使用時(shí),系統要對它進(jìn)行保護,禁止其他任務(wù)對設備進(jìn)行操作,直到設備資源被釋放。
3)關(guān)閉設備操作 關(guān)閉設備操作就是釋放設備資源。任務(wù)對設備完成操作后,必須進(jìn)行關(guān)閉設備操作,否則設備總是處于被占用狀態(tài),其他任務(wù)無(wú)法使用。與打開(kāi)設備操作相對應,有打開(kāi)操作就應該有關(guān)閉操作。
4)從設備上接收數據并提交給系統 這項功能通常就是所說(shuō)的讀操作,接收外部傳輸來(lái)的數據。接收數據采用的方式有查詢(xún)方式、中斷方式和DMA方式。
5)把數據從主機上發(fā)送給設備 這項功能對應通常的寫(xiě)操作,把主機上的數據傳送給外界。通常系統主動(dòng)調用該操作進(jìn)行數據發(fā)送,有時(shí)也采取中斷方式發(fā)送數據。
6)對設備進(jìn)行控制操作 在使用設備過(guò)程中,有時(shí)根據應用的需要對設備進(jìn)行控制(例如改變設備某個(gè)狀態(tài)),而控制操作就能提供這種功能。
2.2 設備驅動(dòng)程序的接口
通用設備驅動(dòng)程序基本都是通過(guò)I/O系統來(lái)存取的,這樣做的好處是可以屏蔽底層硬件,對上層應用程序提供統一的接口。Vx-Works的I/O系統由基本I/O及含buffer的I/O組成,它提供標準的C庫函數,基本I/O庫與Unix兼容,而含buffer的I/O則與ANSI C兼容。VxWorks的I/O系統有其獨特的特性,使得它比其他I/O系統更快速、靈活,這在系統中非常重要。還有一些特殊的通用IO設備驅動(dòng)程序如串行通用IO設備驅動(dòng)程序由于其自身的特性,雖然不是通過(guò)標準I/O來(lái)進(jìn)行存取的,但是也都有它們各自相關(guān)的規范。下面只介紹通過(guò)I/O系統存取的通用IO設備驅動(dòng)程序。
VxWorks作為為了能夠更快、更靈活地進(jìn)行I/O操作,提供了若干庫來(lái)支持標準的字符設備和塊設備。一個(gè)字符設備的驅動(dòng)程序和I/O系統直接作用,調用驅動(dòng)程序安裝函數iosDrvInstall()在VxWorks中安裝驅動(dòng)程序。它執行7個(gè)基本的I/O操作:create,rem-ove,open,close,read,write和ioctl。如果設備不支持某些I/O操作,則相應的程序可以被省略。iosDrvInstall()只是為驅動(dòng)程序在驅動(dòng)程序表中分配了一個(gè)位置,要運行驅動(dòng)程序還需要調用設備安裝函數iosDevAdd()。iosDevAdd()把設備名和驅動(dòng)程序號寫(xiě)到數據結構DEV_ HDR中,并把它加到系統的設備列表中。
一個(gè)塊設備的驅動(dòng)掛在文件系統上比直接掛在I/O系統上使用起來(lái)更方便。它先和文件系統作用,再由文件系統與I/O系統作用。塊設備驅動(dòng)程序不使用iosDrvlnstall()來(lái)安裝驅動(dòng)程序,而是通過(guò)初始化塊設備描述結構BLK_DEV或順序設備描述結構SEQ_DEV來(lái)實(shí)現驅動(dòng)程序提供給文件系統的功能。類(lèi)似的,塊設備驅動(dòng)程序不使用iosDevAdd()來(lái)將驅動(dòng)程序裝入I/O系統,而是使用文件系統設備初始化函數,如dos-FsDevInit()來(lái)完成。實(shí)際上,文件系統把自己作為一個(gè)驅動(dòng)程序裝到I/O系統中,并把請求轉發(fā)給實(shí)際的設備驅動(dòng)程序。
2.3 設備驅動(dòng)程序的組成
設備驅動(dòng)程序包括3部分:初始化部分、函數功能部分和中斷服務(wù)程序ISR。
1)初始化部分初始化硬件,分配設備所需的資源,完成所有與系統相關(guān)的設置。如果是字符設備,首先調用iosDrvInstall()來(lái)安裝驅動(dòng)程序,把中斷向量和ISR掛上,然后調用iosDevAdd()將驅動(dòng)程序加入I/O系統中;如果是塊設備,首先把中斷向量和ISR掛上,在內存中分配一個(gè)設備結構,然后初始化該結構。用戶(hù)要使用該設備時(shí),先調用設備初始化函數xxlnit(),再調用設備創(chuàng )建函數xxDevCreate(),返回一個(gè)BLK_DEV結構的指針,供文件系統初始化函數使用。
2)函數功能部分完成系統指定的功能。對于字符設備,這些函數就是指定的7個(gè)標準的I/O函數;對于塊設備,則是在BLK_DEV或SEQ_DEV結構中指定的功能函數。
3)中斷服務(wù)程序是系統的重要組成部分,系統通過(guò)中斷機制來(lái)了解外部事件,并作出響應。實(shí)時(shí)系統的反應速度取決于系統對中斷的響應速度和中斷處理程序的處理速度。因此,中斷服務(wù)程序的處理時(shí)間應盡量短。所有的中斷服務(wù)程序共享一個(gè)堆棧,沒(méi)有任務(wù)控制塊,所以,在中斷服務(wù)程序中不能使用可導致阻塞的函數,如printf(…)、semTake(…)等。中斷服務(wù)程序中可以使用semGive(…)與其他的非中斷服務(wù)程序進(jìn)行通信。理想的情況,一個(gè)中斷服務(wù)程序僅調用一個(gè)semGive(…)系統調用,也就是說(shuō),中斷服務(wù)程序的主要功能應該是發(fā)起一個(gè)任務(wù)來(lái)完成必要的處理。為提高中斷服務(wù)程序與任務(wù)的合作性能,最好的機制是信號量。

3 END網(wǎng)口驅動(dòng)開(kāi)發(fā)
經(jīng)過(guò)上述論述,本章通過(guò)END網(wǎng)口驅動(dòng)的實(shí)例具體說(shuō)明設備驅動(dòng)程序的開(kāi)發(fā)過(guò)程。
1)驅動(dòng)程序的設備安裝函數 在BSP中對confidh,configNeth文件進(jìn)行修改。首先在configh中增加#define INCLUDE_END,其次在configNeth文件中endTb1中添加一行:
b.JPG
其中每行的第1項是設備的單元號;第2項是驅動(dòng)程序的endLoad()入口點(diǎn);第3項是要傳給該入口點(diǎn)的字符串,該字符串通常表示內存地址、I/O地址和中斷號等參數;第4項表示是否支持緩沖區借出;第5項表示BSP私有數據;第6項是執行標志,為FALSE表示該入口點(diǎn)還未被執行,在系統成功裝載一個(gè)驅動(dòng)程序后,該值被改為T(mén)rue。設置該值為T(mén)rue是為了防止系統自動(dòng)裝載該驅動(dòng)。做完上述工作后,驅動(dòng)程序就可以添加到VxWorks中。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>