基于PCI總線的嵌入式實(shí)時(shí)圖像處理系統(tǒng)
Windows主要根據(jù)頁(yè)錯(cuò)誤機(jī)制實(shí)現(xiàn)對(duì)存儲(chǔ)器映射設(shè)備訪問(wèn)的虛擬化。要捕獲對(duì)某個(gè)設(shè)備內(nèi)存的訪問(wèn),設(shè)備VxD驅(qū)動(dòng)程序會(huì)將頁(yè)表中對(duì)應(yīng)于相應(yīng)當(dāng)內(nèi)存頁(yè)標(biāo)注為“不可用”。當(dāng)在虛擬環(huán)境中運(yùn)行的程序試圖訪問(wèn)這個(gè)頁(yè)時(shí),會(huì)產(chǎn)生一個(gè)錯(cuò)誤。VM的異常處理器會(huì)調(diào)用已注冊(cè)的設(shè)備VxD驅(qū)動(dòng)程序的頁(yè)錯(cuò)誤處理器進(jìn)行相關(guān)處理,即當(dāng)VM訪問(wèn)該端口時(shí)產(chǎn)生異常時(shí)進(jìn)入該硬件的回調(diào)處理器,由我們自己編寫(xiě)的函數(shù)進(jìn)行處理。
3.2 各種驅(qū)動(dòng)程序比較
常見(jiàn)的驅(qū)動(dòng)程序包括三種:VxD,KMD和WDM。
(1) VxD:虛擬設(shè)備驅(qū)動(dòng)程序,是系統(tǒng)用于各種硬件資源識(shí)別、管理、維護(hù)運(yùn)作的擴(kuò)展。VxD和VMM一起維持著系統(tǒng)的運(yùn)作。VxD運(yùn)作組Intel系列CPU保護(hù)模式下的Ring0,擁有對(duì)硬件的最高控制權(quán)。
(2) KMD,Kernel Mode Driver。它是WindowsNT下提出的管理、維護(hù)硬件運(yùn)作的驅(qū)動(dòng)程序模式。該Driver運(yùn)行于WindowsNT的Kernel模式下(類似于Ring0)。但一個(gè)KMD的運(yùn)行環(huán)境在不同的時(shí)候是根本不同的,Driver收到設(shè)備請(qǐng)求時(shí)的運(yùn)行環(huán)境很可能和設(shè)備請(qǐng)求實(shí)際操作的運(yùn)行環(huán)境根本不同,因此在WindowsNT下Driver的運(yùn)作受到WindowsNT本身的很多限制。
(3) WDM,Win32 Driver Model。它可以和Windows2000兼容,MS力推的全新的驅(qū)動(dòng)程序模式,它實(shí)際也可以理解為一個(gè)即插即用的KMD。WMD代碼很長(zhǎng),Windows98對(duì)WDM支持有限,因此WMD難以一時(shí)取代VxD。
3.3 PCI2040驅(qū)動(dòng)程序開(kāi)發(fā)
PCI2040不是標(biāo)準(zhǔn)的硬件設(shè)備,因此必須自己編寫(xiě)PCI2040的硬件安裝信息文件和驅(qū)動(dòng)程序。PCI2040配置空間如附表: 其中設(shè)備ID用以標(biāo)識(shí)特定的設(shè)備,具體的代碼由供應(yīng)商來(lái)分派;供應(yīng)商ID用以表明設(shè)備的制造者,這二者是識(shí)別PCI設(shè)備的唯一標(biāo)識(shí)。對(duì)于PCI2040來(lái)說(shuō),當(dāng)讀Vendor-device ID時(shí),返回值為AC60104C。
(1) 設(shè)備信息安裝文件
設(shè)備信息安裝文件(.INF)包含了驅(qū)動(dòng)程序的名稱、驅(qū)動(dòng)程序應(yīng)該復(fù)制到的目錄,以及在驅(qū)動(dòng)程序安裝時(shí)必須生成和修改的注冊(cè)表入口。
在編寫(xiě)INF文件時(shí),可以使用了VtoolsD開(kāi)發(fā)包中的INF Editor工具,以下是我所編寫(xiě)的PCI2040安裝信息文件。
[Version]
Signature=$CHICAGO$
Class=PCI Bridge file://設(shè)備類型為PCI橋設(shè)備
Provider=%String0% file://供應(yīng)商的名稱
[ClassInstall]
[DestinationDirs]
DefaultDestDir=11 file://將驅(qū)動(dòng)程序安裝在
file://C:WindowsSystem目錄下
[Manufacturer]
%String1%=SECTION_0
[SECTION_0]
%String2%=sevenstar,PCIVEN_104CDEV_AC60
[sevenstar]
CopyFiles=CopyFiles_sevenstar
AddReg=AddReg_sevenstar
[CopyFiles_sevenstar]
DSP_PCI_Bridge.vxd file://驅(qū)動(dòng)程序的名稱為 file://DSP_PCI_Bridge.vxd
[AddReg_sevenstar]
HKR,,DevLoader,0, DSP_PCI_Bridge.vxd file://在注 file://冊(cè)表中添加相關(guān)信息
[sevenstar_LogConfig]
ConfigPriority=NORMAL
IRQConfig=3,7,9,10,15 file://指定PCI2040可 file://選的中斷口
[ControlFlags]
[SourceDisksNames]
1=pci2040驅(qū)動(dòng)盤(pán),,0000-0000
[SourceDisksFiles]
DSP_PCI_Bridge.vxd=1
[Strings]
String0="Texas Instruments"
String1="TI"
String2=“PCI橋接”
(2) VxD的創(chuàng)建
Windows支持靜態(tài)安裝和動(dòng)態(tài)安裝VxD,前者是在Windows初始化時(shí)安裝VxD并一直保存在Windows中,后者是在一個(gè)應(yīng)用程序或其他VxD的控制下安裝和卸載。靜態(tài)安裝的VxD始終占用著一定的內(nèi)存資源以及中斷口,若不是一直運(yùn)行,則導(dǎo)致了資源浪費(fèi)。
在使用QuickVxD開(kāi)發(fā)VxD只需在Dynamically Loadable選項(xiàng)中打勾就行了,其中Device Name是指我們的VxD的設(shè)備名,每個(gè)VxD都有設(shè)備名這兒是指PCI2040芯片,Device ID是用來(lái)標(biāo)識(shí)設(shè)備,只有當(dāng)該VxD需要提供對(duì)其他VxD的調(diào)用入口時(shí)才用,且不能任意取應(yīng)該由Microsoft公司提供,一般情況直接用UNDEFINED_DEVICE_ID就行了,Device Initialization Order確定Windows對(duì)VxD的安裝順序,比如你想要你的VxD先于VDD初始化就應(yīng)該設(shè)置為VDD_INIT_ORDER-1,一般情況也使用默認(rèn)值。
4 結(jié)束語(yǔ)
圖像處理系統(tǒng)實(shí)現(xiàn)的關(guān)鍵在于如何對(duì)大容量的信息進(jìn)行暫存、壓縮和傳輸?shù)葐?wèn)題進(jìn)行處理。本系統(tǒng)的實(shí)現(xiàn)很好的解決了這三個(gè)難題。在圖像信息暫存方面充分利用了DSP存儲(chǔ)空間的可擴(kuò)展性,保證了系統(tǒng)可暫存的信息量足夠大;信息壓縮是DSP的最擅長(zhǎng)做的事情,可以在很短的時(shí)間內(nèi)完成大量的信息壓縮工作;PCI總線的引入保證了信息在足夠的帶寬下進(jìn)行快速傳輸。
評(píng)論