摘要:本文闡明了單片機(jī)在電力系統(tǒng)安全統(tǒng)計(jì)上的應(yīng)用與設(shè)計(jì)方法。幾年來(lái),通過(guò)一些單位的實(shí)際應(yīng)用,已證實(shí)了使用單片機(jī)進(jìn)行自動(dòng)控制的優(yōu)越性。 關(guān)鍵詞:?jiǎn)纹瑱C(jī);自動(dòng)控制;軟件
標(biāo)簽: 單片機(jī) 電力 系統(tǒng)安全
上傳時(shí)間: 2013-11-07
上傳用戶(hù):wenyuoo
摘要:介紹了一種使用新型單片機(jī)作為控制單元的焊接防觸電裝置的硬件系統(tǒng)和控制軟件。硬件部分包括Microchip公司的PIC系列單片機(jī)控制部分和由晶閘管組成的強(qiáng)電部分,控制軟件采用PID(Pm-portional Integral Differentia1)控制算法,使得該裝置不僅能夠?qū)崿F(xiàn)焊接的防觸電功能,而且還可以控制焊接電流,使焊接電流滿(mǎn)足焊接工藝要求的恒流特性,獲得較好的焊接效果。關(guān)鍵詞:?jiǎn)纹瑱C(jī)應(yīng)用;焊接電源;防觸電
上傳時(shí)間: 2013-10-09
上傳用戶(hù):YUANQINHUI
摘要: 本文在研究了網(wǎng)絡(luò)安全的國(guó)內(nèi)外有關(guān)情況后對(duì)網(wǎng)絡(luò)安全技術(shù)進(jìn)行了探討,介紹了一種簡(jiǎn)單而實(shí)用的網(wǎng)絡(luò)安全產(chǎn)品,添補(bǔ)了這方面的空白,而且本文介紹的產(chǎn)品已經(jīng)應(yīng)用到了許多部門(mén),為網(wǎng)絡(luò)安全做出了貢獻(xiàn).關(guān)鍵詞: 網(wǎng)絡(luò);安全;Internet;黑客;物理隔離;MT8870
標(biāo)簽: 網(wǎng)絡(luò) 安全產(chǎn)品
上傳時(shí)間: 2013-11-20
上傳用戶(hù):1318695663
摘要:本文較為詳細(xì)地介紹基于多CPU的單片機(jī)系統(tǒng)設(shè)計(jì)思想,并給出它在社區(qū)安全防范系統(tǒng)中的應(yīng)用。關(guān)鍵詞:多CPU安全防范系統(tǒng)設(shè)計(jì)
標(biāo)簽: CPU 單片機(jī) 中的應(yīng)用 系統(tǒng)設(shè)計(jì)
上傳時(shí)間: 2013-11-20
上傳用戶(hù):taa123456
單片機(jī)的選擇和使用 目前單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒(méi)有單片機(jī)的蹤跡。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過(guò)程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車(chē)的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物等等,這些都離不開(kāi)單片機(jī)。更不用說(shuō)自動(dòng)控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械了。因此,單片機(jī)的學(xué)習(xí)、開(kāi)發(fā)與應(yīng)用將造就一批計(jì)算機(jī)應(yīng)用與智能化控制的科學(xué)家、工程師。 單片機(jī)廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專(zhuān)用設(shè)備的智能化管理及過(guò)程控制等領(lǐng)域,大致可分如下幾個(gè)范疇: 1.在智能儀器儀表上的應(yīng)用 單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,結(jié)合不同類(lèi)型的傳感器,可實(shí)現(xiàn)諸如電壓、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長(zhǎng)度、硬度、元素、壓力等物理量的測(cè)量。采用單片機(jī)控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強(qiáng)大。例如精密的測(cè)量設(shè)備(功率計(jì),示波器,各種分析儀)。 2.在工業(yè)控制中的應(yīng)用 用單片機(jī)可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)。例如工廠(chǎng)流水線(xiàn)的智能化管理,電梯智能化控制、各種報(bào)警系統(tǒng),與計(jì)算機(jī)聯(lián)網(wǎng)構(gòu)成二級(jí)控制系統(tǒng)等。 3.在家用電器中的應(yīng)用 可以這樣說(shuō),現(xiàn)在的家用電器基本上都采用了單片機(jī)控制,從電飯褒、洗衣機(jī)、電冰箱、空調(diào)機(jī)、彩電、其他音響視頻器材、再到電子秤量設(shè)備,五花八門(mén),無(wú)所不在。 4.在計(jì)算機(jī)網(wǎng)絡(luò)和通信領(lǐng)域中的應(yīng)用 現(xiàn)代的單片機(jī)普遍具備通信接口,可以很方便地與計(jì)算機(jī)進(jìn)行數(shù)據(jù)通信,為在計(jì)算機(jī)網(wǎng)絡(luò)和通信設(shè)備間的應(yīng)用提供了極好的物質(zhì)條件,現(xiàn)在的通信設(shè)備基本上都實(shí)現(xiàn)了單片機(jī)智能控制,從手機(jī),電話(huà)機(jī)、小型程控交換機(jī)、樓宇自動(dòng)通信呼叫系統(tǒng)、列車(chē)無(wú)線(xiàn)通信、再到日常工作中隨處可見(jiàn)的移動(dòng)電話(huà),集群移動(dòng)通信,無(wú)線(xiàn)電對(duì)講機(jī)等。 5.單片機(jī)在醫(yī)用設(shè)備領(lǐng)域中的應(yīng)用 單片機(jī)在醫(yī)用設(shè)備中的用途亦相當(dāng)廣泛,例如醫(yī)用呼吸機(jī),各種分析儀,監(jiān)護(hù)儀,超聲診斷設(shè)備及病床呼叫系統(tǒng)等等。 6.在各種大型電器中的模塊化應(yīng)用 某些專(zhuān)用單片機(jī)設(shè)計(jì)用于實(shí)現(xiàn)特定功能,從而在各種電路中進(jìn)行模塊化應(yīng)用,而不要求使用人員了解其內(nèi)部結(jié)構(gòu)。如音樂(lè)集成單片機(jī),看似簡(jiǎn)單的功能,微縮在純電子芯片中(有別于磁帶機(jī)的原理),就需要復(fù)雜的類(lèi)似于計(jì)算機(jī)的原理。如:音樂(lè)信號(hào)以數(shù)字的形式存于存儲(chǔ)器中(類(lèi)似于ROM),由微控制器讀出,轉(zhuǎn)化為模擬音樂(lè)電信號(hào)(類(lèi)似于聲卡)。 在大型電路中,這種模塊化應(yīng)用極大地縮小了體積,簡(jiǎn)化了電路,降低了損壞、錯(cuò)誤率,也方便于更換。 7.單片機(jī)在汽車(chē)設(shè)備領(lǐng)域中的應(yīng)用 單片機(jī)在汽車(chē)電子中的應(yīng)用非常廣泛,例如汽車(chē)中的發(fā)動(dòng)機(jī)控制器,基于CAN總線(xiàn)的汽車(chē)發(fā)動(dòng)機(jī)智能電子控制器,GPS導(dǎo)航系統(tǒng),abs防抱死系統(tǒng),制動(dòng)系統(tǒng)等等。 此外,單片機(jī)在工商,金融,科研、教育,國(guó)防航空航天等領(lǐng)域都有著十分廣泛的用途。
標(biāo)簽: 單片機(jī)
上傳時(shí)間: 2013-11-25
上傳用戶(hù):zjf3110
PICmicro中檔單片機(jī)系列參考手冊(cè):請(qǐng)注意以下有關(guān)Microchip 器件代碼保護(hù)功能的要點(diǎn):• Microchip的產(chǎn)品均達(dá)到Microchip 數(shù)據(jù)手冊(cè)中所述的技術(shù)指標(biāo)。• Microchip確信:在正常使用的情況下, Microchip 系列產(chǎn)品是當(dāng)今市場(chǎng)上同類(lèi)產(chǎn)品中最安全的產(chǎn)品之一。• 目前,仍存在著惡意、甚至是非法破壞代碼保護(hù)功能的行為。就我們所知,所有這些行為都不是以Microchip 數(shù)據(jù)手冊(cè)中規(guī)定的操作規(guī)范來(lái)使用Microchip 產(chǎn)品的。這樣做的人極可能侵犯了知識(shí)產(chǎn)權(quán)。• Microchip愿與那些注重代碼完整性的客戶(hù)合作。• Microchip或任何其它半導(dǎo)體廠(chǎng)商均無(wú)法保證其代碼的安全性。代碼保護(hù)并不意味著我們保證產(chǎn)品是“牢不可破”的。代碼保護(hù)功能處于持續(xù)發(fā)展中。Microchip 承諾將不斷改進(jìn)產(chǎn)品的代碼保護(hù)功能。任何試圖破壞Microchip 代碼保護(hù)功能的行為均可視為違反了《數(shù)字器件千年版權(quán)法案(Digital Millennium Copyright Act)》。如果這種行為導(dǎo)致他人在未經(jīng)授權(quán)的情況下,能訪(fǎng)問(wèn)您的軟件或其它受版權(quán)保護(hù)的成果,您有權(quán)依據(jù)該法案提起訴訟,從而制止這種行為的。 Microchip 公司是The Embedded Control Solutions Company® (嵌入式控制系統(tǒng)解決方案公司),其產(chǎn)品主要滿(mǎn)足嵌入式控制市場(chǎng)的需求。我們是以下產(chǎn)品的領(lǐng)先供應(yīng)商:• 8 位通用單片機(jī)(PICmicro® 單片機(jī))• 專(zhuān)用和標(biāo)準(zhǔn)的非易失性存儲(chǔ)器件• 安防器件 (KEELOQ®)• 專(zhuān)用標(biāo)準(zhǔn)產(chǎn)品欲獲得您所感興趣的產(chǎn)品列表,請(qǐng)申請(qǐng)一份Microchip 產(chǎn)品線(xiàn)目錄。以往,8 位單片機(jī)的用戶(hù)只選擇傳統(tǒng)的MCU 類(lèi)型,即ROM 器件,用于生產(chǎn)。Microchip 率先改變了這種傳統(tǒng)觀念,向人們展示了OTP (一次性編程)器件比ROM 器件在其壽命周期內(nèi)具有更低的產(chǎn)品成本。Microchip 具備EPROM技術(shù)優(yōu)勢(shì),從而使EPROM成為PICmicro 單片機(jī)程序存儲(chǔ)器的不二選擇。Microchip 盡可能地縮小了EPROM 和ROM 存儲(chǔ)器技術(shù)之間的成本差距,并使顧客從中受益。其他MCU 供應(yīng)商無(wú)法作到這一點(diǎn),這從他們的 EPROM 和 ROM 版本之間的價(jià)格差異便可以看出。Microchip 的8 位單片機(jī)市場(chǎng)份額的增長(zhǎng)證明了PICmicro® 單片機(jī)能夠滿(mǎn)足大多數(shù)人的需要。這也使PICmicro 單片機(jī)架構(gòu)成為了當(dāng)今通用市場(chǎng)上應(yīng)用最廣泛的三大體系之一。Microchip 的低成本OTP 解決方案所帶來(lái)的效益是這一增長(zhǎng)的助推劑。用戶(hù)能夠從以下各方面受益:• 快速的產(chǎn)品上市時(shí)間• 允許生產(chǎn)過(guò)程中對(duì)產(chǎn)品進(jìn)行代碼修改• 無(wú)需掩膜產(chǎn)品所需的一次性工程費(fèi)用(NRE)• 能夠輕松為產(chǎn)品進(jìn)行連續(xù)編號(hào)• 無(wú)需額外增加硬件即可存儲(chǔ)校準(zhǔn)數(shù)據(jù)• 可最大限度地增加PICmicro® 單片機(jī)的庫(kù)存• 由于在開(kāi)發(fā)和生產(chǎn)中使用同一器件,從而降低了風(fēng)險(xiǎn)Microchip 的8 位 PICmicro 單片機(jī)具備很好的性?xún)r(jià)比,可成為任何傳統(tǒng)的8 位應(yīng)用和某些4 位應(yīng)用( 低檔系列)、專(zhuān)用邏輯的替代品以及低端DSP 應(yīng)用( 高檔系列) 的選擇。這些特點(diǎn)及其良好的性?xún)r(jià)比使PICmicro 單片機(jī)在大多數(shù)應(yīng)用場(chǎng)合極具吸引力。
標(biāo)簽: PICmicro 單片機(jī) 參考手冊(cè)
上傳時(shí)間: 2014-03-03
上傳用戶(hù):ainimao
Microchip ZigBee協(xié)議棧:ZigBee™ 是專(zhuān)為低速率傳感器和控制網(wǎng)絡(luò)設(shè)計(jì)的無(wú)線(xiàn)網(wǎng)絡(luò)協(xié)議。有許多應(yīng)用可從ZigBee 協(xié)議受益,其中可能的一些應(yīng)用有:建筑自動(dòng)化網(wǎng)絡(luò)、住宅安防系統(tǒng)、工業(yè)控制網(wǎng)絡(luò)、遠(yuǎn)程抄表以及PC 外設(shè)。與其他無(wú)線(xiàn)協(xié)議相比, ZigBee 無(wú)線(xiàn)協(xié)議提供了低復(fù)雜性、縮減的資源要求,最重要的是它提供了一組標(biāo)準(zhǔn)的規(guī)范。它還提供了三個(gè)工作頻帶,以及一些網(wǎng)絡(luò)配置和可選的安全功能。如果您正在尋求現(xiàn)有的控制網(wǎng)絡(luò)技術(shù)(例如RS-422、RS-485)或?qū)S袩o(wú)線(xiàn)協(xié)議的替代方案, ZigBee 協(xié)議可能是您所需的解決方案。此應(yīng)用筆記旨在幫助您在應(yīng)用中采用ZigBee 協(xié)議。 可以使用在應(yīng)用筆記中提供的Microchip ZigBee 協(xié)議棧快速地構(gòu)建應(yīng)用。為了說(shuō)明該協(xié)議棧的用法,本文包含了兩個(gè)有效的演示應(yīng)用程序。可將這兩個(gè)演示程序作為參考或者根據(jù)您的需求經(jīng)過(guò)簡(jiǎn)單修改來(lái)采用它們。此應(yīng)用筆記中提供的協(xié)議棧函數(shù)庫(kù)實(shí)現(xiàn)了一個(gè)與物理層無(wú)關(guān)的應(yīng)用程序接口。 因此,無(wú)需做重大修改就可以輕松地在射頻(Radio Frequency,RF)收發(fā)器之間移植應(yīng)用程序。在此文檔末尾的“常見(jiàn)問(wèn)題解答”中提供了有關(guān)Microchip 協(xié)議棧和用法的一些常見(jiàn)問(wèn)題及其答案。
標(biāo)簽: Microchip ZigBee 協(xié)議棧
上傳時(shí)間: 2013-10-08
上傳用戶(hù):u789u789u789
為了提高望遠(yuǎn)鏡影像穩(wěn)定系統(tǒng)的防抖性能,設(shè)計(jì)了一種小型望遠(yuǎn)鏡防抖系統(tǒng)。采用負(fù)反饋閉環(huán)控制進(jìn)行鏡片的位置伺服控制,以MSP430F169 單片機(jī)為核心控制電路,闡述了防抖系統(tǒng)的原理并給出了硬件和軟件設(shè)計(jì)方案,通過(guò)實(shí)物調(diào)試證明采用該設(shè)計(jì)方法的望遠(yuǎn)鏡防抖系統(tǒng)具有結(jié)構(gòu)簡(jiǎn)單,穩(wěn)定性好、控制精度高的優(yōu)點(diǎn)。防抖系統(tǒng)正日益廣泛地應(yīng)用于照相機(jī)和望遠(yuǎn)鏡等光學(xué)設(shè)備中。防抖主要分為光學(xué)防抖和電子防抖,光學(xué)防抖通過(guò)光學(xué)器件進(jìn)行影響穩(wěn)定;電子防抖采用軟件的方法,針對(duì)數(shù)字圖像設(shè)計(jì)基于圖像處理的影像穩(wěn)定算法[1]。對(duì)于望遠(yuǎn)鏡來(lái)說(shuō),在放大視角的同時(shí),也會(huì)將手的抖動(dòng)造成的影像晃動(dòng)放大,在高倍望遠(yuǎn)鏡中尤其明顯。天文望遠(yuǎn)鏡、軍用望遠(yuǎn)鏡等高倍望遠(yuǎn)鏡在使用時(shí)通常需要配合三腳架,而大多數(shù)的手持望遠(yuǎn)鏡在沒(méi)有影像穩(wěn)定措施的情況下觀察效果受到擾動(dòng)。如果觀察者站在車(chē)、船、飛機(jī)上時(shí),晃動(dòng)的影響更加嚴(yán)重,即使把望遠(yuǎn)鏡裝到三角架上,也不能消除晃動(dòng)的影響。因此,開(kāi)發(fā)適合望遠(yuǎn)鏡使用的影像穩(wěn)定系統(tǒng)已經(jīng)成為一項(xiàng)迫切的任務(wù),防抖動(dòng)望遠(yuǎn)鏡將會(huì)具有很大的市場(chǎng)前景。影像穩(wěn)定屬于跟蹤控制問(wèn)題。文獻(xiàn)[2]設(shè)計(jì)了一種采用形狀可變的流體棱鏡進(jìn)行抖動(dòng)補(bǔ)償?shù)姆椒ā1疚脑O(shè)計(jì)了以MSP430 單片機(jī)為核心的防抖控制系統(tǒng),給出了系統(tǒng)硬件設(shè)計(jì)電路,使用C430 語(yǔ)言進(jìn)行軟件調(diào)試,以實(shí)現(xiàn)對(duì)望遠(yuǎn)鏡防抖系統(tǒng)的有效控制。
標(biāo)簽: MSP 430 望遠(yuǎn)鏡 防抖
上傳時(shí)間: 2013-12-02
上傳用戶(hù):blacklee
P C B 可測(cè)性設(shè)計(jì)布線(xiàn)規(guī)則之建議― ― 從源頭改善可測(cè)率PCB 設(shè)計(jì)除需考慮功能性與安全性等要求外,亦需考慮可生產(chǎn)與可測(cè)試。這里提供可測(cè)性設(shè)計(jì)建議供設(shè)計(jì)布線(xiàn)工程師參考。1. 每一個(gè)銅箔電路支點(diǎn),至少需要一個(gè)可測(cè)試點(diǎn)。如無(wú)對(duì)應(yīng)的測(cè)試點(diǎn),將可導(dǎo)致與之相關(guān)的開(kāi)短路不可檢出,并且與之相連的零件會(huì)因無(wú)測(cè)試點(diǎn)而不可測(cè)。2. 雙面治具會(huì)增加制作成本,且上針板的測(cè)試針定位準(zhǔn)確度差。所以L(fǎng)ayout 時(shí)應(yīng)通過(guò)Via Hole 盡可能將測(cè)試點(diǎn)放置于同一面。這樣就只要做單面治具即可。3. 測(cè)試選點(diǎn)優(yōu)先級(jí):A.測(cè)墊(Test Pad) B.通孔(Through Hole) C.零件腳(Component Lead) D.貫穿孔(Via Hole)(未Mask)。而對(duì)于零件腳,應(yīng)以AI 零件腳及其它較細(xì)較短腳為優(yōu)先,較粗或較長(zhǎng)的引腳接觸性誤判多。4. PCB 厚度至少要62mil(1.35mm),厚度少于此值之PCB 容易板彎變形,影響測(cè)點(diǎn)精準(zhǔn)度,制作治具需特殊處理。5. 避免將測(cè)點(diǎn)置于SMT 之PAD 上,因SMT 零件會(huì)偏移,故不可靠,且易傷及零件。6. 避免使用過(guò)長(zhǎng)零件腳(>170mil(4.3mm))或過(guò)大的孔(直徑>1.5mm)為測(cè)點(diǎn)。7. 對(duì)于電池(Battery)最好預(yù)留Jumper,在ICT 測(cè)試時(shí)能有效隔離電池的影響。8. 定位孔要求:(a) 定位孔(Tooling Hole)直徑最好為125mil(3.175mm)及其以上。(b) 每一片PCB 須有2 個(gè)定位孔和一個(gè)防呆孔(也可說(shuō)成定位孔,用以預(yù)防將PCB反放而導(dǎo)致機(jī)器壓破板),且孔內(nèi)不能沾錫。(c) 選擇以對(duì)角線(xiàn),距離最遠(yuǎn)之2 孔為定位孔。(d) 各定位孔(含防呆孔)不應(yīng)設(shè)計(jì)成中心對(duì)稱(chēng),即PCB 旋轉(zhuǎn)180 度角后仍能放入PCB,這樣,作業(yè)員易于反放而致機(jī)器壓破板)9. 測(cè)試點(diǎn)要求:(e) 兩測(cè)點(diǎn)或測(cè)點(diǎn)與預(yù)鉆孔之中心距不得小于50mil(1.27mm),否則有一測(cè)點(diǎn)無(wú)法植針。以大于100mil(2.54mm)為佳,其次是75mil(1.905mm)。(f) 測(cè)點(diǎn)應(yīng)離其附近零件(位于同一面者)至少100mil,如為高于3mm 零件,則應(yīng)至少間距120mil,方便治具制作。(g) 測(cè)點(diǎn)應(yīng)平均分布于PCB 表面,避免局部密度過(guò)高,影響治具測(cè)試時(shí)測(cè)試針壓力平衡。(h) 測(cè)點(diǎn)直徑最好能不小于35mil(0.9mm),如在上針板,則最好不小于40mil(1.00mm),圓形、正方形均可。小于0.030”(30mil)之測(cè)點(diǎn)需額外加工,以導(dǎo)正目標(biāo)。(i) 測(cè)點(diǎn)的Pad 及Via 不應(yīng)有防焊漆(Solder Mask)。(j) 測(cè)點(diǎn)應(yīng)離板邊或折邊至少100mil。(k) 錫點(diǎn)被實(shí)踐證實(shí)是最好的測(cè)試探針接觸點(diǎn)。因?yàn)殄a的氧化物較輕且容易刺穿。以錫點(diǎn)作測(cè)試點(diǎn),因接觸不良導(dǎo)致誤判的機(jī)會(huì)極少且可延長(zhǎng)探針使用壽命。錫點(diǎn)尤其以PCB 光板制作時(shí)的噴錫點(diǎn)最佳。PCB 裸銅測(cè)點(diǎn),高溫后已氧化,且其硬度高,所以探針接觸電阻變化而致測(cè)試誤判率很高。如果裸銅測(cè)點(diǎn)在SMT 時(shí)加上錫膏再經(jīng)回流焊固化為錫點(diǎn),雖可大幅改善,但因助焊劑或吃錫不完全的緣故,仍會(huì)出現(xiàn)較多的接觸誤判。
標(biāo)簽: PCB 可測(cè)性設(shè)計(jì) 布線(xiàn)規(guī)則
上傳時(shí)間: 2014-01-14
上傳用戶(hù):cylnpy
有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過(guò)為設(shè)備創(chuàng)建的一個(gè)符號(hào)鏈;2. 通過(guò)輸出到一個(gè)接口WDM驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號(hào)鏈的方法。這個(gè)接口保證PDO的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語(yǔ)言的訪(fǎng)問(wèn)設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs來(lái)調(diào)用設(shè)備。在某個(gè)Win32 APIs和設(shè)備對(duì)象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對(duì)設(shè)備對(duì)象訪(fǎng)問(wèn)的第一步就是打開(kāi)一個(gè)設(shè)備對(duì)象的句柄。 用符號(hào)鏈打開(kāi)一個(gè)設(shè)備的句柄為了打開(kāi)一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號(hào)鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開(kāi)句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開(kāi)一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號(hào)鏈,以便應(yīng)用程序能夠打開(kāi)它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個(gè)參數(shù)中前綴后的部分就是這個(gè)符號(hào)鏈的名字。注意:CreatFile中的第一個(gè)參數(shù)不是Windows 98/2000中驅(qū)動(dòng)程序(.sys文件)的路徑。是到設(shè)備對(duì)象的符號(hào)鏈。如果使用DriverWizard產(chǎn)生驅(qū)動(dòng)程序,它通常使用類(lèi)KunitizedName來(lái)構(gòu)成設(shè)備的符號(hào)鏈。這意味著符號(hào)鏈名有一個(gè)附加的數(shù)字,通常是0。例如:如果鏈接名稱(chēng)的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個(gè)參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個(gè)輸出接口打開(kāi)句柄用這種方式打開(kāi)一個(gè)句柄會(huì)稍微麻煩一些。DriverWorks庫(kù)提供兩個(gè)助手類(lèi)來(lái)使獲得對(duì)該接口的訪(fǎng)問(wèn)容易一些,這兩個(gè)類(lèi)是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類(lèi)封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類(lèi)中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類(lèi)的一個(gè)實(shí)例來(lái)獲得一個(gè)或更多的CdeviceInterface類(lèi)的實(shí)例。CdeviceInterface類(lèi)是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile中使用來(lái)打開(kāi)設(shè)備。下面用一個(gè)小例子來(lái)顯示這些類(lèi)最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在設(shè)備中執(zhí)行I/O操作一旦應(yīng)用程序獲得一個(gè)有效的設(shè)備句柄,它就能使用Win32 APIs來(lái)產(chǎn)生到設(shè)備對(duì)象的IRPs。下面的表顯示了這種對(duì)應(yīng)關(guān)系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解釋一下設(shè)備類(lèi)成員的Close和CleanUp:CreateFile使內(nèi)核為設(shè)備創(chuàng)建一個(gè)新的文件對(duì)象。這使得多個(gè)句柄可以映射同一個(gè)文件對(duì)象。當(dāng)這個(gè)文件對(duì)象的最后一個(gè)用戶(hù)級(jí)句柄被撤銷(xiāo)后,I/O管理器調(diào)用CleanUp。當(dāng)沒(méi)有任何用戶(hù)級(jí)和核心級(jí)的對(duì)文件對(duì)象的訪(fǎng)問(wèn)的時(shí)候,I/O管理器調(diào)用Close。如果被打開(kāi)的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯(cuò)誤(無(wú)效功能)。以前為Windows95編寫(xiě)的VxD的應(yīng)用程序代碼中可能會(huì)在打開(kāi)設(shè)備的時(shí)候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個(gè)屬性,因?yàn)樗鼘?dǎo)致沒(méi)有特權(quán)的用戶(hù)企圖打開(kāi)這個(gè)設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴(lài)于設(shè)備對(duì)象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲(chǔ)器中,并且創(chuàng)建了一個(gè)存儲(chǔ)在IRP中的MDL域。一個(gè)設(shè)備可以通過(guò)調(diào)用Kirp::Mdl來(lái)存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對(duì)象分別通過(guò)KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來(lái)對(duì)應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲(chǔ)區(qū)并沒(méi)有被鎖住而且地址只對(duì)調(diào)用進(jìn)程有效。驅(qū)動(dòng)程序可以使用KIrp::UserBuffer來(lái)存取IRP域。對(duì)于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴(lài)于特殊的I/O控制代碼,它不在設(shè)備對(duì)象的特性中。宏CTL_CODE(在winioctl.h中定義)用來(lái)構(gòu)造控制代碼。這個(gè)宏的其中一個(gè)參數(shù)指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對(duì)應(yīng)的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數(shù):Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統(tǒng)分配一個(gè)單一的緩沖來(lái)作為輸入與輸出。驅(qū)動(dòng)程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動(dòng)程序通過(guò)調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時(shí),I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級(jí)調(diào)用者使用的緩沖中。驅(qū)動(dòng)程序必須在結(jié)束前存儲(chǔ)拷貝到IRP的Information成員中的數(shù)據(jù)個(gè)數(shù)。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數(shù)呈現(xiàn)不同的含義。參數(shù)InputBuffer被拷貝到一個(gè)系統(tǒng)緩沖,這個(gè)緩沖驅(qū)動(dòng)程序可以通過(guò)調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對(duì)象,驅(qū)動(dòng)程序?qū)@個(gè)對(duì)象的訪(fǎng)問(wèn)通過(guò)調(diào)用KIrp::Mdl來(lái)實(shí)現(xiàn)。對(duì)于METHOD_OUT_DIRECT,調(diào)用者必須有對(duì)緩沖的寫(xiě)訪(fǎng)問(wèn)權(quán)限。注意,對(duì)METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會(huì)做映射來(lái)配置緩沖。虛擬地址只對(duì)調(diào)用進(jìn)程有效。這里是一個(gè)用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來(lái)定義一個(gè)IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現(xiàn)在使用一個(gè)DeviceIoControl調(diào)用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,這里放的是包含有執(zhí)行操作命令的字符串指針 0, FirmwareRev, //這里是output串指針,存放從驅(qū)動(dòng)程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設(shè)備拷貝串到里面并將拷貝的資結(jié)束設(shè)置到FirmwareRevSize中。在驅(qū)動(dòng)程序中,代碼看起來(lái)如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
標(biāo)簽: 驅(qū)動(dòng)程序 應(yīng)用程序 接口
上傳時(shí)間: 2013-10-17
上傳用戶(hù):gai928943
蟲(chóng)蟲(chóng)下載站版權(quán)所有 京ICP備2021023401號(hào)-1