淺談Windows C E的中斷處理及中斷流驅動(dòng)的應用
引 言
本文引用地址:http://dyxdggzs.com/article/149883.htm近年來(lái),隨著(zhù)硬件復雜性、多樣性和應用復雜性的增加,軟件開(kāi)發(fā)工作量急劇增長(cháng),傳統的開(kāi)發(fā)模式已經(jīng)不能適應系統z雜性的增長(cháng)。而嵌入式操作系統是嵌入式軟件的運行平臺和開(kāi)發(fā)平臺,它的引入極大地提高了軟件的開(kāi)發(fā)效率,方便了軟件的維護。WindowsCE是微軟公司嵌入式、移動(dòng)計算平臺的基礎,它是一個(gè)開(kāi)放的、可升級的32位嵌入式操作系統,是基于掌上型電腦類(lèi)的電子設備操作系統,它是精簡(jiǎn)的Windows 95,Windows CE的圖形用戶(hù)界面相當出色。Windows CE作業(yè)系統是Windows家族中最新的成員,專(zhuān)門(mén)設計給掌上型電腦(HPCs)所使用的電腦環(huán)境。這樣的作業(yè)系統可使完整的可攜式技術(shù)與現有的Windows桌面技術(shù)整合工作。 Windows CE 被設計成針對小型設備(它是典型的擁有有限內存的無(wú)磁盤(pán)系統)的通用操作系統,Windows CE 可以通過(guò)設計一層位于內核和硬件之間代碼來(lái)用設定硬件平臺,各種處理器都有豐富的外部中斷源,中斷源和操作系統之間通常采用中斷機制來(lái)控制數據的交互。硬件廠(chǎng)商沒(méi)有為一些外部中斷源提供Windows CE下的驅動(dòng),所以有時(shí)驅動(dòng)成為項目開(kāi)發(fā)關(guān)鍵的一環(huán)。
1 Windows CE中斷處理
1.1 中斷產(chǎn)生
在Windows CE中,系統的中斷分為兩種:軟中斷和硬中斷。軟中斷是一種信號機制,而不是由軟件產(chǎn)生的中斷信號。硬中斷通常是外部設備對CPU發(fā)出中斷信弓。一般來(lái)說(shuō),軟中斷是由操作系統內核機制的事件產(chǎn)生的,例如定時(shí)器超叫,但是有的軟中斷由和硬件有關(guān)的中斷引起。例如,當外部產(chǎn)生一個(gè)硬中斷時(shí),會(huì )產(chǎn)生和硬件相關(guān)的一個(gè)軟中斷,軟中斷是利用硬件中斷的概念,用軟件方式進(jìn)行模擬,實(shí)現宏觀(guān)上的異步執行效果。很多情況下,軟中斷和信號有些類(lèi)似,同時(shí),軟中斷又是和硬中斷相對應的,硬中斷是外部設備對CPU的中斷,軟中斷通常是硬中斷服務(wù)程序對內核的中斷,信號則是由內核(或其他進(jìn)程)對某個(gè)進(jìn)程的中斷般來(lái)說(shuō),軟中斷是由內核機制的觸發(fā)事件引起的(例如進(jìn)程運行超時(shí)),但是不可忽視有大量的軟中斷也是由于和硬件有關(guān)的中斷引起的,例如當打印機端口產(chǎn)生一個(gè)硬件中斷時(shí),會(huì )通知和硬件相關(guān)的硬中斷,硬中斷就會(huì )產(chǎn)生一個(gè)軟中斷并送到操作系統內核里,這樣內核就會(huì )根據這個(gè)軟中斷喚醒睡眠在打印機任務(wù)隊列中的處理進(jìn)程。 這樣內核就會(huì )在適當的時(shí)機處理這個(gè)軟中斷,喚醒睡眠在相應任務(wù)隊列中的處理例程。
1.2 中斷處理模型
Windows CE提供了一個(gè)有效的中斷處理機制,它把對中斷的處理分為兩部分:中斷服務(wù)例程(ISR)和中斷服務(wù)線(xiàn)程(IST)。ISR通常要求短小精悍,效率要求很?chē)栏?。它只決定該怎樣處理這個(gè)中斷,一般情況下不應該做太多的工作。大部分工作依靠IST處理,IST和CST(commON spanning tree,公共生成樹(shù))共同構成整個(gè)交換機網(wǎng)絡(luò )的生成樹(shù)CIST(common and internal spanning tree,公共和內部生成樹(shù))。IST是CIST在MST域內的片段,是一個(gè)特殊的多生成樹(shù)實(shí)例。根據IEEE802.1s規范的規定,MST實(shí)例能夠支持802.1Q和802.1s之間的互操作性。IST實(shí)例接收并且向CST發(fā)送BPDU.IST實(shí)例能夠將整個(gè)MST區域表示為到達外部世界的CST虛擬網(wǎng)橋。如將數據移到緩存或處理用戶(hù)某些特殊要求的工作。Windows CE中斷處理模型如圖1所示。
1.3 中斷處理過(guò)程
Windows CE支持兩種ISR:靜態(tài)ISR和可安裝ISR.靜態(tài)ISR只能靜態(tài)地編譯進(jìn)內核,運行時(shí)不能改變。與IST通信時(shí),它也只能是單向的,即由ISR到IST.靜態(tài)ISR支持嵌套中斷,并且使用內核堆棧??砂惭bISR由內核管理程序從動(dòng)態(tài)鏈接庫中加載。和靜態(tài)ISR不同,它和IST的通信是雙向的,多個(gè)ISR可以與同一個(gè)中斷請求相關(guān)聯(lián),系統按照加載驅動(dòng)的順序依次調度。圖2為中斷處理過(guò)程。
對圖2的中斷處理過(guò)程作以下幾點(diǎn)解釋?zhuān)?/p>
?、佼攦群说漠惓L幚泶a接收到一個(gè)來(lái)自硬件的中斷時(shí),內核會(huì )偵測到一個(gè)異常情況發(fā)生,并會(huì )提交這個(gè)硬件中斷。
?、趦群说闹袛嘀С痔幚砥魍ㄖ狪SR去禁止該中斷的重復提交,直到相關(guān)的中斷處理全部完成后,才再度使能該中斷。在這個(gè)過(guò)程中,允許高優(yōu)先級中斷觸發(fā)。為使系統能及時(shí)響應并處理發(fā)生的所有中斷,系統根據引起中斷事件的重要性和緊迫程度,硬件將中斷源分為若干個(gè)級別,稱(chēng)作中斷優(yōu)先級。引入多級中斷是因為:為使系統能及時(shí)的響應和處理所發(fā)生的緊迫中斷,同時(shí)又不至于發(fā)生中斷信號丟失,計算機發(fā)展早期在設計中斷系統硬件時(shí)根據各種中斷的輕重在線(xiàn)路上作出安排,從而使中斷響應能有一個(gè)優(yōu)先次序。多級中斷的處理原則:當多級中斷同時(shí)發(fā)生時(shí),CPU按照由高到低的順序響應。高級中斷可以打斷低級中斷處理程序的運行,轉而執行高級中斷處理程序。當同級中斷同時(shí)到時(shí),則按位響應。
?、郛惓L幚砥髡{用ISR來(lái)響應中斷。
?、軆群私邮誌SR返回值,依據該返回值決定如何處理中斷。
?、輧群擞|發(fā)中斷支持管理器來(lái)喚醒中斷服務(wù)線(xiàn)程(IST)并激活該線(xiàn)程。
?、蕻斨袛喾?wù)線(xiàn)程(IST)被喚醒后,它開(kāi)始處理相應的中斷。
?、呷绻枰?,中斷服務(wù)線(xiàn)程調用各種I/0例程訪(fǎng)問(wèn)硬件來(lái)完成工作。
?、嘀袛嗵幚斫Y束后調用InterruptDone函數通知內核。
?、醿群苏{用OEMInterruptDone完成整個(gè)中斷處理過(guò)程,0AL通知底層硬件使能所有中斷。
2 中斷流驅動(dòng)程序設計
2.1 驅動(dòng)的概念
驅動(dòng)程序是一個(gè)軟件模塊,其功能就是對設備、協(xié)議甚至某些服務(wù)進(jìn)行管理。驅動(dòng)程序是直接和設備進(jìn)行通信的部分,設備可以是物理設備或邏輯設備。
流接口的驅動(dòng)是基本的設備驅動(dòng)類(lèi)型,它實(shí)現一組固定的流接口函數。所有流接口驅動(dòng)程序使用相同的接口并調用同一個(gè)函數集--流接口函數,大部分WindowsCE設備驅動(dòng)都可用此模型來(lái)實(shí)現。流接口驅動(dòng)程序由設備管理程序(Device.exe)自動(dòng)加載、管理和卸載,也可以通過(guò)API函數手動(dòng)加載、管理和卸載。
2.2 設計方法
Windows CE提供了幾種基于等待隊列的進(jìn)程間通信手段,其中事件在驅動(dòng)設計中經(jīng)常被用來(lái)引發(fā)某一個(gè)中斷處理。中斷是Windows CE驅動(dòng)設計的關(guān)鍵之一,驅動(dòng)程序需要實(shí)現特定設備的中斷響應、中斷引發(fā)的數據傳送和處理??梢园淹庠O中斷時(shí)所需處理的任務(wù)封裝到流接口函數中,應用程序使用Windows CE操作系統的文件API函數與流接口進(jìn)行通信,從而達到應用程序訪(fǎng)問(wèn)驅動(dòng)程序和操作硬件的目的。
本文以KEYl按鍵連接到S3C2440外部中斷EINTl(GPFl)引腳的按鍵電路為例,給出中斷流接口驅動(dòng)程序的一般設計方法,電路原理圖如圖3所示。
流接口驅動(dòng)程序的入口點(diǎn)函數、調用方式以及每個(gè)函數實(shí)現的功能如表1所列Ⅲ。其中電源管理函數,即EIT-PowerDown和EIT_PowerUp是可選的,這里沒(méi)有調用。
2.3 編寫(xiě)代碼
在三星公司BSP包驅動(dòng)程序的存放位置下新建一個(gè)目錄EINT,用文本編輯器建立5個(gè)文本文件,文件名分別為EINTl.c、EINTl.h、EINTl.def、sources、makefile.
從表1可以看出,驅動(dòng)程序大部分功能都是在EIT_Init()函數中完成的,在EINTl.c文件中編寫(xiě)EIT_Init()函數,如下所示。
EIT_Init()函數中創(chuàng )建了外部中斷EINTl中斷服務(wù)線(xiàn)程gEINTIntrThread具體代碼如下所示。該函數首先創(chuàng )建外部中斷事件gWaitEvent(用于ISR通知IST外部中斷EINTl中斷觸發(fā)),然后調用內核函數InterruptInitialize()與gWaitEvent關(guān)聯(lián)起來(lái),并使能該中斷。
其他幾個(gè)流接口函數編程簡(jiǎn)單,這里不作詳細敘述。參考驅動(dòng)目錄下其他驅動(dòng)完成sources、makefile和EINT.def文件的編寫(xiě),當EINT目錄下的5個(gè)文件都編寫(xiě)好后,在Platform Build 5.O編譯后,用Windows CE附帶的dumpbin工具(在Build菜單下)輸入命令:dlampbin/exports EINTl.dll,輸出結果如圖4所示,導出了表1所列的流接口函數。
結 語(yǔ)
Windows CE采用中斷方式處理外部設備的隨機輸入,提高了CPU的運行效率。本文用一個(gè)實(shí)例對中斷流驅動(dòng)程序的開(kāi)發(fā)進(jìn)行了介紹,只需在此驅動(dòng)程序的基礎上稍作修改就可完成其他中斷的驅動(dòng)程序開(kāi)發(fā)。驅動(dòng)程序編譯成功后,通過(guò)進(jìn)一步修改BSP的FILES目錄下的platform.bib和platform.reg文件,可將驅動(dòng)加入到操作系統中。
交換機相關(guān)文章:交換機工作原理
評論