网站首页
教育杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
医学杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
经济杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
金融杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
管理杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
科技杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
工业杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
SCI杂志
中科院1区 中科院2区 中科院3区 中科院4区
全部期刊
公務(wù)員期刊網(wǎng) 精選范文 驅(qū)動(dòng)程序設(shè)計(jì)范文

驅(qū)動(dòng)程序設(shè)計(jì)精選(九篇)

前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的驅(qū)動(dòng)程序設(shè)計(jì)主題范文,僅供參考,歡迎閱讀并收藏。

第1篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

關(guān)鍵詞:CPCI 422;驅(qū)動(dòng)設(shè)計(jì);模塊互換;IVI規(guī)范

中圖分類號(hào):TP311.11

0 引 言

可互換虛擬儀器(Interchangeable Virtual Instrument,IVI)驅(qū)動(dòng)程序規(guī)范是由IVI基金會(huì)在VPP\[1\]基礎(chǔ)上為儀器驅(qū)動(dòng)制定的編程接口規(guī)范。它擴(kuò)展了VPP儀器驅(qū)動(dòng)程序的標(biāo)準(zhǔn),并增加了儀器的可互換性、仿真和狀態(tài)緩存等特點(diǎn),從而實(shí)現(xiàn)不同型號(hào)儀器之間的互換,在測(cè)試系統(tǒng)硬件組成發(fā)生變化時(shí),測(cè)試程序代碼可以重用。RS 422總線通常用于串行數(shù)據(jù)通信,采用平衡的差分?jǐn)?shù)據(jù)傳輸方式,最大傳輸速率能達(dá)到10 Mb/s,最大傳輸距離為300 m。目前有關(guān)422的接口模塊種類很多,為了實(shí)現(xiàn)各種型號(hào)422模塊的互換,使用IVI標(biāo)準(zhǔn)進(jìn)行驅(qū)動(dòng)設(shè)計(jì)是很必要的。

1 IVI驅(qū)動(dòng)程序的結(jié)構(gòu)

IVI驅(qū)動(dòng)程序體系結(jié)構(gòu)主要包括IVI類驅(qū)動(dòng)庫(kù)、IVI專用驅(qū)動(dòng)庫(kù)、IVI引擎、IVI配置實(shí)用程序、IVI配置信息文件。其中,IVI 類驅(qū)動(dòng)器是儀器的功能和屬性集,通過(guò)這些功能和屬性集實(shí)現(xiàn)對(duì)一種儀器類進(jìn)行控制。它是一組接口函數(shù),并不直接控制儀器工作。目前,已經(jīng)了示波器、數(shù)字萬(wàn)用表等8類儀器規(guī)范\[2\]。IVI專用驅(qū)動(dòng)庫(kù)封裝了用于控制某一種儀器所需要的信息,能夠直接與儀器硬件通信。IVI 引擎主要完成狀態(tài)緩存、儀器屬性跟蹤、類驅(qū)動(dòng)器到專用驅(qū)動(dòng)器的映像功能,是實(shí)現(xiàn) IVI 儀器驅(qū)動(dòng)程序完成狀態(tài)緩存和其他增強(qiáng)性能的關(guān)鍵支持庫(kù)。IVI 配置實(shí)用程序用于配置儀器無(wú)關(guān)測(cè)試系統(tǒng),創(chuàng)建和配置 IVI邏輯名稱,在測(cè)試程序中通過(guò)傳送邏輯名稱將操作映像到具體儀器驅(qū)動(dòng)程序。具體IVI體系層次結(jié)構(gòu)如圖1所示\[3\]。

[HT5”K][JZ]圖1 IVI體系結(jié)構(gòu)[HT5]

目前,國(guó)內(nèi)外只有NI公司,比較系統(tǒng)地提出了實(shí)現(xiàn)儀器互換的體系結(jié)構(gòu)。該公司已經(jīng)實(shí)現(xiàn)了8類儀器的IVI驅(qū)動(dòng)開(kāi)發(fā),而且也提供一個(gè)名為“MAX”的IVI配置程序,用于配置儀器無(wú)關(guān)測(cè)試系統(tǒng)。同時(shí)也提供了一個(gè)專用驅(qū)動(dòng)庫(kù)開(kāi)發(fā)向?qū)?用以開(kāi)發(fā)專用驅(qū)動(dòng)\[4\]。但該向?qū)Р荒軐?duì)已有驅(qū)動(dòng)程序進(jìn)行升級(jí)和IVI標(biāo)準(zhǔn)封裝,NI公司也沒(méi)有提供類驅(qū)動(dòng)庫(kù)的開(kāi)發(fā)向?qū)?加上類驅(qū)動(dòng)庫(kù)數(shù)量的局限性,導(dǎo)致部分模塊無(wú)法用NI公司提供的開(kāi)發(fā)向?qū)нM(jìn)行IVI驅(qū)動(dòng)設(shè)計(jì),比如文中所涉及的CPCI 422基于IVI標(biāo)準(zhǔn)的驅(qū)動(dòng)開(kāi)發(fā)\[5\]。

2 CPCI 422驅(qū)動(dòng)開(kāi)發(fā)

在此,以自研CPCI 422模塊為例,介紹422驅(qū)動(dòng)程序開(kāi)發(fā)過(guò)程。CPCI 422模塊具有CPCI總線接口,能通過(guò)422總線發(fā)送數(shù)據(jù),并且能接收被測(cè)設(shè)備通過(guò)422總線傳來(lái)的數(shù)據(jù),并把數(shù)據(jù)傳送給上位機(jī)進(jìn)行處理。該模塊具有8個(gè)通道,每個(gè)通道均能實(shí)現(xiàn)接收或者發(fā)送功能,通道能夠單獨(dú)工作也可一起工作,并且能對(duì)數(shù)據(jù)傳輸參數(shù)進(jìn)行設(shè)置。

針對(duì)IVI體系結(jié)構(gòu),首先設(shè)計(jì)422類驅(qū)動(dòng)函數(shù)庫(kù)。然后在類驅(qū)動(dòng)函數(shù)庫(kù)基礎(chǔ)上開(kāi)發(fā)專用驅(qū)動(dòng)函數(shù)庫(kù),驅(qū)動(dòng)函數(shù)最后以.dll形式存在,采用 LabWindows/CVI,Visual Basic和 Visual C++等開(kāi)發(fā)環(huán)境均可以開(kāi)發(fā)。同時(shí)設(shè)計(jì)具備IVI引擎功能函數(shù)或者程序。對(duì)于IVI 配置信息文件可以通過(guò)專門的IVI配置實(shí)用軟件(如NI公司提供的MAX)或者其他文本編輯器進(jìn)行編輯。

基于IVI標(biāo)準(zhǔn)的驅(qū)動(dòng)程序配置引擎是整個(gè)IVI體系中的核心支柱。其主要功能就是實(shí)現(xiàn)類驅(qū)動(dòng)庫(kù)到專用驅(qū)動(dòng)庫(kù)的映射,使應(yīng)用程序在調(diào)用類驅(qū)動(dòng)庫(kù)時(shí)能自動(dòng)加載相應(yīng)配置的專用驅(qū)動(dòng)庫(kù)。

該設(shè)計(jì)中,IVI配置引擎設(shè)計(jì)的主要思路是通過(guò)讀取配置信息文件,由配置文件中所設(shè)置的模塊邏輯名找到對(duì)應(yīng)的專用驅(qū)動(dòng)庫(kù)信息字段。此字段主要包括專用驅(qū)動(dòng)庫(kù)路徑文件名、專用驅(qū)動(dòng)庫(kù)函數(shù)前綴等,然后通過(guò)這些一一對(duì)應(yīng)的映射關(guān)系,自動(dòng)加載專用驅(qū)動(dòng)庫(kù)。其工作流程如圖2所示。

該設(shè)計(jì)運(yùn)用函數(shù)ivi422Class_SpecificDriver實(shí)現(xiàn)自動(dòng)加載功能。下面為具體的函數(shù)設(shè)計(jì):

該函數(shù)核心是以代表專用驅(qū)動(dòng)庫(kù)文件名稱為形式參數(shù),調(diào)用LoadLibrary( )函數(shù)加載專用驅(qū)動(dòng)庫(kù)。應(yīng)用程序只需通過(guò)類驅(qū)動(dòng)庫(kù)及模塊的配置信息作為參數(shù),調(diào)用ivi422Class_SpecificDrive()函數(shù),即可實(shí)現(xiàn)專用驅(qū)動(dòng)庫(kù)的自動(dòng)加載。根據(jù)上面介紹可知,讀取配置文件以及根據(jù)配置文件自動(dòng)加載專用驅(qū)動(dòng)庫(kù),即可實(shí)現(xiàn)配置引擎的功能。

類驅(qū)動(dòng)庫(kù)是IVI體系的外觀框架,用來(lái)控制一個(gè)特定類型儀器的一系列功能和屬性。它是一組編程接口,而不對(duì)儀器進(jìn)行直接操作。該設(shè)計(jì)中,為了實(shí)現(xiàn)422模塊的正常通信,作為連接虛擬儀器硬件和應(yīng)用測(cè)試程序的紐帶,將422類驅(qū)動(dòng)函數(shù)規(guī)劃如表1所示。序號(hào)函數(shù)功能描述

1Init打開(kāi)并初始化儀器

2Close關(guān)閉儀器

3SerialRead開(kāi)始接收數(shù)據(jù)

4SetClock設(shè)置每個(gè)通道波特率模式

5SetUART通道工作參數(shù)設(shè)置

6SetDivisor通道具體波特率設(shè)置

7ChannelControl設(shè)置每個(gè)通道的工作狀態(tài)

8SerialWriteData開(kāi)始發(fā)送數(shù)據(jù)

9SpecificDriver動(dòng)態(tài)加載專用驅(qū)動(dòng)庫(kù)[HJ0][HJ][HT5SS]

根據(jù)IVI規(guī)范,類驅(qū)動(dòng)函數(shù)由函數(shù)名前綴加具體函數(shù)名構(gòu)成。在參數(shù)設(shè)置上均采用VISA數(shù)據(jù)類型。在該設(shè)計(jì)中,類驅(qū)動(dòng)函數(shù)均采用ivi422Class作為函數(shù)前綴名?,F(xiàn)舉例如下:

該函數(shù)的功能是提供儀器初始化函數(shù)接口,其中返回值定義為ViStatus型,具體表示形式,參照IVI標(biāo)準(zhǔn),如IVI_SUCCESS。參數(shù)為ViSession型指針,用來(lái)返回儀器資源句柄。

根據(jù)前面介紹可知,類驅(qū)動(dòng)函數(shù)只提供接口功能,不涉及具體儀器操作,現(xiàn)仍以初始化函數(shù)為例,介紹類驅(qū)動(dòng)函數(shù)如何實(shí)現(xiàn)接口功能。其具體實(shí)現(xiàn)如下:

該函數(shù)的核心部分就是調(diào)用GetProcAddress(hDLL,FuncName)函數(shù),獲取專用驅(qū)動(dòng)庫(kù)函數(shù)對(duì)應(yīng)函數(shù)地址。其中,hDLL為在配置引擎功能中調(diào)用ivi422Class_SpecificDriver()函數(shù)獲取的專用驅(qū)動(dòng)庫(kù)句柄,FuncName為對(duì)應(yīng)函數(shù)名稱。

對(duì)于專用驅(qū)動(dòng)動(dòng)態(tài)鏈接庫(kù)的開(kāi)發(fā),該設(shè)計(jì)未借助Labwindows/CVI中的專用驅(qū)動(dòng)開(kāi)發(fā)向?qū)?而是直接在VC中進(jìn)行編制。專用驅(qū)動(dòng)庫(kù)函數(shù)的主體函數(shù)名和參數(shù)類型與類驅(qū)動(dòng)是完全一致的,否則類驅(qū)動(dòng)和專用驅(qū)動(dòng)之間的參數(shù)傳遞會(huì)出錯(cuò)\[8\]。為了與類驅(qū)動(dòng)前綴名相區(qū)別,在該設(shè)計(jì)中,專用驅(qū)動(dòng)函數(shù)前綴名一律為ivi422。舉例如下:

函數(shù)則具體針對(duì)儀器操作,完成模塊初始化功能。

對(duì)于上層應(yīng)用程序,專用驅(qū)動(dòng)函數(shù)隱藏了具體硬件工作細(xì)節(jié),只以函數(shù)的形式提供了完成一項(xiàng)具體功能的接口。上層應(yīng)用程序只需要通過(guò)類驅(qū)動(dòng)庫(kù)間接調(diào)用專用驅(qū)動(dòng)庫(kù)提供的函數(shù),即可完成對(duì)硬件的操作控制。規(guī)劃表中已經(jīng)列出了422操控的基本函數(shù),如果需要再增加函數(shù),只需要在類驅(qū)動(dòng)的專用驅(qū)動(dòng)中同時(shí)增加,便能實(shí)現(xiàn)功能擴(kuò)展。

[BT3]2.3 CPCI 422模塊IVI驅(qū)動(dòng)程序中配置文件編輯

對(duì)于IVI 配置信息文件,可以通過(guò)專門的IVI配置實(shí)用軟件(如NI公司提供的MAX)進(jìn)行編輯。在該設(shè)計(jì)中,利用圖形化編程軟件自己設(shè)計(jì)以對(duì)話框?yàn)榛A(chǔ)的配置實(shí)用程序,通過(guò)此程序?qū)ε渲梦募M(jìn)行編輯。圖3為此程序的主界面。

通過(guò)此程序,修改配置文件中的邏輯名字段、描述字段、驅(qū)動(dòng)庫(kù)加載路徑字段,以及驅(qū)動(dòng)函數(shù)前綴字段、仿真調(diào)試字段。然后通過(guò)配置引擎對(duì)于配置文件的讀操作,建立類驅(qū)動(dòng)庫(kù)和專用驅(qū)動(dòng)庫(kù)的正確映射。當(dāng)改變模塊時(shí),只需要改變模塊的邏輯名,以及模塊專用驅(qū)動(dòng)庫(kù)的加載路徑和前綴,而不需要修改類驅(qū)動(dòng)庫(kù),也不會(huì)影響上層應(yīng)用程序,從而實(shí)現(xiàn)了儀器的互換特性。

2.4 應(yīng)用程序調(diào)用驅(qū)動(dòng)工作流程

首先,應(yīng)用程序通過(guò)一個(gè)邏輯名調(diào)用 IVI 類驅(qū)動(dòng)庫(kù),配置引擎,將該邏輯名與配置文件中的所有邏輯名進(jìn)行匹配,得到實(shí)際的 IVI專用驅(qū)動(dòng)庫(kù)指針,并實(shí)現(xiàn)該驅(qū)動(dòng)器的動(dòng)態(tài)加載;然后將 IVI 類驅(qū)動(dòng)器中的函數(shù)和屬性與IVI 類專用驅(qū)動(dòng)器的對(duì)應(yīng)函數(shù)和屬性進(jìn)行鏈接,使應(yīng)用程序可以間接地訪問(wèn)這些函數(shù)和屬性。在編制應(yīng)用程序時(shí),應(yīng)同時(shí)包含類驅(qū)動(dòng)庫(kù)的動(dòng)態(tài)鏈接庫(kù)和頭文件,編制過(guò)程中,對(duì)開(kāi)發(fā)人員只需調(diào)用類驅(qū)動(dòng)函數(shù)。┩4為應(yīng)用IVI體系基于422模塊的應(yīng)用程序調(diào)用驅(qū)動(dòng)工作流程。

第2篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

通信卡的硬件設(shè)計(jì)

1 通信卡的主要特點(diǎn)

通信卡的硬件設(shè)計(jì)目的是智能化通信:在卡上具有4個(gè)DMA通道及相應(yīng)的數(shù)據(jù)緩沖存儲(chǔ)區(qū)。在數(shù)據(jù)的接收過(guò)程中,通信卡會(huì)自動(dòng)接收幀數(shù)據(jù),判別幀長(zhǎng)度,在幀尾將接收到的幀數(shù)據(jù)提交系統(tǒng)。在發(fā)送數(shù)據(jù)過(guò)程中,系統(tǒng)只須把發(fā)送的數(shù)據(jù)提交給本卡,具體的發(fā)送過(guò)程由該卡自行完成,不因多路通信而使主機(jī)增加開(kāi)銷。該卡有內(nèi)/外時(shí)鐘兩種工作方式,近距離可省去調(diào)制解調(diào)器,波特率為600b/s-64Kb/s,提供2路符合RS-232/CCITT V.24和RS-422A標(biāo)準(zhǔn)的接口信號(hào)。

2 通信卡的電路設(shè)計(jì)

通信卡組成框圖如圖1所示。其主要由DMA控制器、總線競(jìng)爭(zhēng)仲裁器、串行通信控制器、數(shù)據(jù)緩沖存儲(chǔ)器SRAM、存儲(chǔ)器I/O映像和物理地址產(chǎn)生器、總線接口及防護(hù)、波特率產(chǎn)生器、接口電路等單元電路組成。

DMA控制器作為通信卡的主設(shè)備,控制卡上的數(shù)據(jù)接收和發(fā)送(來(lái)自通信控制器和CPU),并負(fù)責(zé)仲裁優(yōu)先權(quán)。由于在進(jìn)行數(shù)據(jù)通信時(shí),允許主機(jī)CPU訪問(wèn)本卡SRAM,且主機(jī)對(duì)其中某一路發(fā)控制命令時(shí),不影響其余三路通信,這樣將會(huì)使主機(jī)CPU與本卡DMA競(jìng)爭(zhēng)本卡總線控制權(quán)。而總線上沒(méi)有給出主機(jī)CPU指令排隊(duì)狀態(tài)序列,故不能直接設(shè)計(jì)多主競(jìng)爭(zhēng),因而在本卡總線上用門陣列設(shè)計(jì)了一個(gè)狀態(tài)機(jī),不斷地監(jiān)視總線爭(zhēng)用情況,完成本卡總線競(jìng)爭(zhēng)、仲裁功能。完成HDLC規(guī)程的串行通信的器件是INTEL 8274多規(guī)程串行控制器,它能完成2個(gè)獨(dú)立的串行接收/發(fā)送全雙工通信。為了使4個(gè)信道在一幀數(shù)據(jù)的發(fā)送或接收過(guò)程中,主機(jī)不干預(yù),故將發(fā)送的一幀數(shù)據(jù)在發(fā)送開(kāi)始前由CPU用批命令放入卡上的SRAM中,同樣,在接收過(guò)程中,卡上DMA將接收到的數(shù)據(jù)放入SRAM中,等一幀接收完成后,再用批命令取出,放入系統(tǒng)存儲(chǔ)器中。卡上SRAM不占用主機(jī)內(nèi)存地址,采用I/O映像,該適配器插入主機(jī)之后,主機(jī)通過(guò)系統(tǒng)I/O地址對(duì)其訪問(wèn),這由地址產(chǎn)生器完成??偩€接口包括數(shù)據(jù)收發(fā)器,數(shù)據(jù)開(kāi)關(guān)電路,讀、寫及中斷等控制電路,地址譯碼等。波特率產(chǎn)生器提供了一個(gè)可編程的時(shí)鐘信號(hào)發(fā)生器,用戶可自行設(shè)置通信速率,供工作于內(nèi)時(shí)鐘方式時(shí)使用。接口電路提供符合RS-232/C CITT V.24和RS-422A標(biāo)準(zhǔn)的接口信號(hào)。

3 通信流程設(shè)計(jì)

如果要發(fā)送一幀數(shù)據(jù),CPU用批命令將數(shù)據(jù)放到本卡SRAM中,然后設(shè)置相應(yīng)的發(fā)送DMA通道。DMA通道是非自動(dòng)重裝方式,啟動(dòng)8274控制器發(fā)送,然后CPU就不需要管理,由卡上硬件自動(dòng)發(fā)送。

如果需要接收數(shù)據(jù),啟動(dòng)接收通道。接收通路自動(dòng)搜索輸入信號(hào),搜索到數(shù)據(jù)幀時(shí),由卡上DMA控制器來(lái)管理,將接收的數(shù)據(jù)放人本卡SRAM中,并向CPU請(qǐng)求中斷,讀出數(shù)據(jù)。

4 總線競(jìng)爭(zhēng)設(shè)計(jì)

由于同時(shí)可進(jìn)行四路通信,且CPU可隨時(shí)對(duì)某一路發(fā)控制命令或訪問(wèn)卡上SRAM存儲(chǔ)器,就將出現(xiàn)CPU與本卡主設(shè)備DMA爭(zhēng)用本卡總線的狀況。由于ISA總線沒(méi)能給出CPU指令排隊(duì)狀態(tài)序列,這給總線仲裁帶來(lái)了困難,而本卡的總線競(jìng)爭(zhēng)、仲裁是由可編程邏輯器件設(shè)計(jì)的狀態(tài)機(jī)來(lái)完成的。狀態(tài)機(jī)使用一個(gè)4MHz信號(hào)作為時(shí)鐘,共設(shè)3種狀態(tài):

①CPU控制狀態(tài)。

②DMA控制狀態(tài)。

③空閑狀態(tài),CPU及DMA均未能得到控制權(quán)。

當(dāng)狀態(tài)機(jī)檢測(cè)到無(wú)CPU及DMA申請(qǐng)總線使用權(quán)時(shí),就進(jìn)入空閑狀態(tài),而一旦CPU或DMA請(qǐng)求總線,狀態(tài)機(jī)立即將總線使用權(quán)交給CPU或DMA。如果正在CPU控制狀態(tài)期間,DMA申請(qǐng)總線使用權(quán),狀態(tài)機(jī)仍然判定CPU控制總線,讓DMA處于等待,直到檢測(cè)CPU指令完成,狀態(tài)機(jī)才轉(zhuǎn)為DMA控制狀態(tài)。如果在DMA控制狀態(tài)時(shí),CPU申請(qǐng)總線使用權(quán),狀態(tài)機(jī)仍然判定DMA控制總線,讓CPU處于等待,直至DMA字節(jié)傳送完,狀態(tài)機(jī)轉(zhuǎn)為CPU控制狀態(tài)。CPU及DMA對(duì)總線的使用權(quán)是單個(gè)指令或字節(jié)傳送,不設(shè)置總線封鎖,因而CPU、DMA可頻繁交換使用權(quán),不會(huì)出現(xiàn)等待時(shí)間過(guò)長(zhǎng)的現(xiàn)象。

通信卡的驅(qū)動(dòng)程序設(shè)計(jì)

1 設(shè)備驅(qū)動(dòng)程序的I/O模型

通信卡的驅(qū)動(dòng)程序是利用Windows XP的DDK軟件開(kāi)發(fā)的標(biāo)準(zhǔn)的核心態(tài)設(shè)備驅(qū)動(dòng)程序。它使用統(tǒng)一的“文件”形式,用戶可以通過(guò)代表通信卡設(shè)備的文件名,在WIN32子系統(tǒng)中用文件操作函數(shù)來(lái)訪問(wèn)。該設(shè)備驅(qū)動(dòng)和程序可以根據(jù)用戶的需要,設(shè)置為自動(dòng)加載,或手動(dòng)加載,也可以動(dòng)態(tài)的加載該驅(qū)動(dòng)程序。通信卡的驅(qū)動(dòng)程序設(shè)計(jì)成為支持同步I/O模型,也可以為異步I/O模型。

2 發(fā)送數(shù)據(jù)I/O例程設(shè)計(jì)

在用戶態(tài)提交發(fā)送任務(wù)到核心態(tài),由I/O管理程序負(fù)責(zé)調(diào)用驅(qū)動(dòng)程序,驅(qū)動(dòng)程序發(fā)送IRP交給硬件,假若當(dāng)前發(fā)送器不忙,則具體的發(fā)送操作全部由發(fā)送器自行完成,而驅(qū)動(dòng)程序則返回已經(jīng)一個(gè)本幀可以發(fā)送的標(biāo)志。具體的發(fā)送完成結(jié)果則可以在發(fā)送任務(wù)完成后查詢得到??墒?,如果程序向當(dāng)前設(shè)備發(fā)送器提交發(fā)送任務(wù)時(shí),該發(fā)送器正在處理上一幀,那么則有兩種方法處理。

①立即方式:立即返回一個(gè)錯(cuò)誤,當(dāng)前設(shè)備忙,不能發(fā)送。

②阻塞方式:I/O管理器程序會(huì)調(diào)度相應(yīng)的異步處理例程,將當(dāng)前的發(fā)送任務(wù)放進(jìn)任務(wù)隊(duì)列中,返回一個(gè)標(biāo)志:I/O掛起,當(dāng)前設(shè)備忙,發(fā)送任務(wù)提交任務(wù)隊(duì)列。驅(qū)動(dòng)程序會(huì)在發(fā)送器空閑時(shí),提交任務(wù)隊(duì)列中的發(fā)送任務(wù)給發(fā)送器。完成發(fā)送任務(wù)后,將相關(guān)文件句柄設(shè)為有信號(hào)狀態(tài),通知本次發(fā)送任務(wù)完成。

3 接收數(shù)據(jù)I/O例程

接收數(shù)據(jù)例程采用客戶/服務(wù)器的模式設(shè)計(jì)。由于用戶的接收請(qǐng)求和硬件的接收并不是同步的,所以在設(shè)計(jì)中,為避免丟失數(shù)據(jù),考慮創(chuàng)造一個(gè)專門的接收線程。這樣,同步用戶請(qǐng)求、接收線程、硬件層之間的通信就必須仔細(xì)地設(shè)計(jì)。圖2示意了用戶態(tài)接收請(qǐng)求、接收線程以及硬件層之間的通信同步。

①硬件層與接收線程之間通信

硬件層與接收線程之間通信的同步是通過(guò)同步事件對(duì)象來(lái)實(shí)現(xiàn)的。同步事件對(duì)象通常處于無(wú)信號(hào)狀態(tài),只有當(dāng)成功地接收到一幀時(shí),才將該事件置為有信號(hào)狀態(tài)。接收線長(zhǎng)久等待同步事件對(duì)象,在沒(méi)有收到數(shù)據(jù)時(shí),因同步事件對(duì)象處于無(wú)信號(hào)狀態(tài)而阻塞。當(dāng)硬件檢測(cè)到數(shù)據(jù)時(shí),實(shí)時(shí)中斷服務(wù)程序負(fù)責(zé)將同步事件對(duì)象置為有信號(hào)狀態(tài),接收線程就會(huì)釋放阻塞。將通信卡SRAM上的接收數(shù)據(jù)讀進(jìn)接收線程緩沖區(qū)隊(duì)列,然后將同步事件對(duì)象置為無(wú)信號(hào)狀態(tài),接收線程再次阻塞,等待接收下一幀數(shù)據(jù)。

②用戶層和接收線程之間的通信

當(dāng)用戶提交接收任務(wù)時(shí),由驅(qū)動(dòng)程序的調(diào)度程序讀取接收線程的緩沖區(qū)隊(duì)列,并將標(biāo)志置為“空”,同時(shí)將緩沖隊(duì)列事件置為無(wú)信號(hào)狀態(tài),并返回,如果緩沖區(qū)是空,則

?立即方式:立即返回?zé)o數(shù)據(jù)。

?阻塞方式:阻塞直到有數(shù)據(jù)隊(duì)列進(jìn)入。接收隊(duì)列的每個(gè)緩沖區(qū)都對(duì)應(yīng)一個(gè)通知事件,如果接收線程將SRAM中的數(shù)據(jù)讀進(jìn)隊(duì)列,就將相應(yīng)的通知事件置為有信號(hào)狀態(tài),用戶請(qǐng)求就等待該通知事件,只要有數(shù)據(jù)在隊(duì)列中,就讀取返回,否則被阻塞。

4 硬中斷服務(wù)程序設(shè)計(jì)

通信卡在全雙工的通信中具有實(shí)時(shí)性,而且在較高的波特率,硬中斷非常多。為了防止高優(yōu)先級(jí)中斷過(guò)多地?fù)屨糃PU時(shí)間,設(shè)計(jì)中采用了實(shí)時(shí)中斷服務(wù)程序和延遲過(guò)程調(diào)用的方法。

在Windows XP系統(tǒng)中,每個(gè)內(nèi)核函數(shù)和過(guò)程都運(yùn)行于特定的優(yōu)先級(jí)。較高優(yōu)先級(jí)的函數(shù)或事件可以搶占較低優(yōu)先級(jí),反之則不然。實(shí)時(shí)中斷服務(wù)程序ISR運(yùn)行于DIRQL級(jí),具有較高的優(yōu)先級(jí),它只能被更高級(jí)的硬中斷所搶占,不會(huì)對(duì)同級(jí)或較低優(yōu)先級(jí)的硬中斷的響應(yīng)。所以,在實(shí)時(shí)中斷服務(wù)程序中,只做盡量少的必須工作,即讀出中斷向量,而將大量的數(shù)據(jù)傳送及處理等工作交給延遲過(guò)程DPC去完成。因?yàn)镈PC過(guò)程運(yùn)行于DISPATCH_LEVEL級(jí),是相對(duì)較低的優(yōu)先級(jí),它可以被任何級(jí)的硬中斷所搶占。這樣,既保證了硬中斷的及時(shí)響應(yīng),又提高了程序的性能。

5 驅(qū)動(dòng)程序人口例程

Windows XP為每個(gè)核心態(tài)的驅(qū)動(dòng)程序提供了一個(gè)默認(rèn)的標(biāo)準(zhǔn)入口點(diǎn)DriverEntry()。設(shè)計(jì)中,考慮到該例程運(yùn)行于PASSIVE_LEVE級(jí),系統(tǒng)只運(yùn)行該例程一次就拋棄了,所以在驅(qū)動(dòng)程序中用到的重要數(shù)據(jù)、對(duì)象等都不能保存在DriverEntry()例程中,必須在初始化過(guò)程中分配一塊NoPaged內(nèi)存來(lái)保存。通信卡的驅(qū)動(dòng)程序的DriverEntry()例程主要完成如下功能。

讀取Registry的硬件配置信息,聲明I/O地址、中斷等資源;創(chuàng)建代表通信卡的設(shè)備名MPSC,該名字對(duì)WIN32子系統(tǒng)是可見(jiàn)的;設(shè)置調(diào)度例程入口點(diǎn);分配一塊NoPaged的內(nèi)存,存儲(chǔ)重要信息;連接硬中斷,設(shè)置中斷服務(wù)程序,初始化線程、事件、信號(hào)燈、DPC等內(nèi)核對(duì)象,返回狀態(tài)STATUS_SUCCESS。

如果在以上過(guò)程中遇到錯(cuò)誤,則需要做以下工作:斷開(kāi)硬中斷;釋放硬件資源;將相關(guān)的錯(cuò)誤信息打包,并記錄;返回錯(cuò)誤信息。

6 設(shè)計(jì)驅(qū)動(dòng)程序中需要注意的問(wèn)題

由于通信卡在應(yīng)用中具有一定的實(shí)時(shí)性,為了克服中斷的不確定性。提高系統(tǒng)的性能,開(kāi)發(fā)了Windows XP系統(tǒng)所有驅(qū)動(dòng)程序中最難的異步驅(qū)動(dòng)程序。在系統(tǒng)的內(nèi)核開(kāi)發(fā),異步模型I/O操作中,內(nèi)核對(duì)象的同步十分復(fù)雜,細(xì)微的差錯(cuò)都會(huì)導(dǎo)致系統(tǒng)徹底崩潰。在設(shè)計(jì)驅(qū)動(dòng)程序中需要注意以下問(wèn)題。

?在程序中用到的內(nèi)核對(duì)象:事件、信號(hào)燈、線程以及連鎖等,都必須將其存儲(chǔ)在Nopaged內(nèi)存中,否則,會(huì)造成系統(tǒng)崩潰。

第3篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

關(guān)鍵詞:嵌入式;CF卡;低層驅(qū)動(dòng);存儲(chǔ)設(shè)備

中圖分類號(hào):TB文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3198(2012)12-0162-01

0 引言

設(shè)備驅(qū)動(dòng)程序是構(gòu)成Linux內(nèi)核的主要部分,不合理的驅(qū)動(dòng)設(shè)計(jì)會(huì)導(dǎo)致系統(tǒng)內(nèi)核出現(xiàn)紊亂,由于不穩(wěn)定而導(dǎo)致系統(tǒng)崩潰,使行成重要數(shù)據(jù)丟失或嚴(yán)重后果。因此,設(shè)計(jì)合理的驅(qū)動(dòng)程序,有助于保障系統(tǒng)的整體穩(wěn)定性。在S3C2410開(kāi)發(fā)板下設(shè)計(jì)合理的驅(qū)動(dòng)程序是本文研究的重點(diǎn)。

S3C2410的硬件平臺(tái)是基于ARM公司的ARM920T處理器核,采用32位微控制器,價(jià)格低,功耗低,性能高;軟件平臺(tái)通過(guò)u-boot移植和內(nèi)核編譯完成,所有這些特性使S3C2410為 linux操作系統(tǒng)內(nèi)核驅(qū)動(dòng)程序設(shè)計(jì)提供了較好的解決方案。

目前,嵌入式系統(tǒng)中應(yīng)用最廣泛的存儲(chǔ)卡是CF卡。多數(shù)情況下,使用PCMCIA控制器實(shí)現(xiàn)CF卡的操作,為了減少設(shè)備使用和成本降低,本文在沒(méi)有PCMCIA控制器情況下,探討分析設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)步驟,CF卡的配置及底層驅(qū)動(dòng)如何工作等問(wèn)題,研究實(shí)現(xiàn)了利用CF卡作為存儲(chǔ)設(shè)備的嵌入式Linux系統(tǒng)。

1 系統(tǒng)設(shè)計(jì)

嵌入式系統(tǒng)使用CF卡作為存儲(chǔ)設(shè)備的設(shè)計(jì)目前有很多,而開(kāi)發(fā)設(shè)備的選型不同,開(kāi)發(fā)的方法不同,本系統(tǒng)使用Linux操作系統(tǒng),以S3C2410為開(kāi)發(fā)平臺(tái),以ARM920T處理器為模板來(lái)實(shí)現(xiàn)CF卡的嵌入式系統(tǒng)。

驅(qū)動(dòng)程序開(kāi)發(fā)首先需對(duì)Linux操作系統(tǒng)中原有的IDE程序進(jìn)行改造,用后臺(tái)程序管理CF卡的熱插拔事務(wù),同時(shí)CF卡以Memory尋址訪問(wèn)方式進(jìn)行8位尋址。在對(duì)Linux設(shè)備進(jìn)行驅(qū)動(dòng)程序設(shè)計(jì)時(shí),具體設(shè)計(jì)步驟如下:

(1)啟動(dòng)系統(tǒng),將設(shè)備登記到相應(yīng)的設(shè)備數(shù)組,并返回設(shè)備的主驅(qū)動(dòng)號(hào)。利用設(shè)備號(hào)對(duì)此數(shù)組進(jìn)行索引。調(diào)用設(shè)備注冊(cè)函數(shù)module_register_chrdev()進(jìn)行設(shè)備注冊(cè)。

(2)為驅(qū)動(dòng)函數(shù)定義功能函數(shù),當(dāng)系統(tǒng)調(diào)用這些功能函數(shù)時(shí),系統(tǒng)將自動(dòng)運(yùn)行函數(shù)定的模塊實(shí)現(xiàn)特有的功能。

(3)當(dāng)一個(gè)模塊使用完成時(shí),啟動(dòng)動(dòng)態(tài)的卸載模塊函數(shù),調(diào)用cleanup_module()函數(shù),并調(diào)用設(shè)備注銷函數(shù)即可卸載函數(shù)。

在進(jìn)行設(shè)計(jì)時(shí),需注意Linux設(shè)備驅(qū)動(dòng)程序接口和幾個(gè)重要的數(shù)據(jù)結(jié)構(gòu)。具體有以下四層接口:應(yīng)用進(jìn)程與內(nèi)核、內(nèi)核與文件、文件系統(tǒng)與設(shè)備驅(qū)動(dòng)程序、設(shè)備驅(qū)動(dòng)程序與硬件設(shè)備。

每個(gè)驅(qū)動(dòng)程序都有一個(gè)數(shù)據(jù)結(jié)構(gòu),包含的函數(shù)指針指向所開(kāi)發(fā)的接口,內(nèi)核用主設(shè)備號(hào)作為索引訪問(wèn)數(shù)據(jù)結(jié)構(gòu)。

2 接口和重要的數(shù)據(jù)結(jié)構(gòu)

設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)硬件設(shè)備和內(nèi)核的接口,Linux 操作系統(tǒng)中,Linux 操作系統(tǒng)采用統(tǒng)一的接口,在硬件設(shè)備、設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)、內(nèi)核、應(yīng)用程序進(jìn)程間有相連的接口。

驅(qū)動(dòng)程序有一個(gè)file_operations的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)提供了很多接口,其中常用的接口有open、read、write、seek、release等,為驅(qū)動(dòng)程序開(kāi)發(fā)提供了保障。驅(qū)動(dòng)程序中struct inode數(shù)據(jù)結(jié)構(gòu)為設(shè)備和文件對(duì)應(yīng)了唯一的inode號(hào),驅(qū)動(dòng)程序中同時(shí)也使用了struct file、struct device 數(shù)據(jù)結(jié)構(gòu)。

3 CF卡基本配置

CF卡在存儲(chǔ)操作前,對(duì)CF卡進(jìn)行的相關(guān)配置主要有以下幾個(gè)方面:配置GPIO并分配尋址端口,用于傳輸CF卡信號(hào)。配置CF卡的屬性存儲(chǔ)空間和尋址訪問(wèn)方式。在系統(tǒng)中CF卡使用Memory尋址訪問(wèn)方式,將屬性寄存器配置為0x00,其他屬性寄存器保持默認(rèn)值。驗(yàn)證對(duì)屬性寄存器的值,當(dāng)驅(qū)動(dòng)屬性值與默認(rèn)值不匹配時(shí),則說(shuō)明Memory尋址訪問(wèn)方式?jīng)]有正確使用CF卡,此時(shí)需修改屬性值為默認(rèn)值即可。

4 CF卡驅(qū)動(dòng)程序設(shè)計(jì)

4.1 底層驅(qū)動(dòng)實(shí)現(xiàn)

CF卡存儲(chǔ)備份需要通過(guò)CF卡的底層驅(qū)動(dòng)實(shí)現(xiàn),這就要求CF卡能準(zhǔn)確的接收及響應(yīng)系統(tǒng)對(duì)它的I/0請(qǐng)求。具體流程如下:

(1)在讀寫命令時(shí),使用LBA尋址模式來(lái)訪問(wèn)CF卡。當(dāng)驅(qū)動(dòng)對(duì)CF卡的I/O請(qǐng)求進(jìn)行正確接收后,此時(shí)把相關(guān)參數(shù)值和ATA命令值寫入對(duì)應(yīng)的寄存器,并向CF卡ATA命令,即完成了ATA命令。

(2)填寫ATA命令控制塊后,CF卡可以利用輪詢的方法對(duì)發(fā)送的命令做出響應(yīng)。

(3)受外部環(huán)境影響造成CF卡沒(méi)有接收到命令或者接收命令出錯(cuò)時(shí),可以使用軟重置將其恢復(fù)到初始狀態(tài),并重新發(fā)送該ATA命令。

快捷的實(shí)現(xiàn)存儲(chǔ)備份需使CF卡能及時(shí)響應(yīng)熱插拔,把CF卡設(shè)定為TureIDE工作模式,這樣CF卡就可以隨意移動(dòng)。在系統(tǒng)層注冊(cè)字符型設(shè)備CFMGR文件實(shí)現(xiàn)探測(cè)熱插拔事件、與應(yīng)用層通信,實(shí)現(xiàn)分配或釋放系統(tǒng)資源,從而驅(qū)動(dòng)CF卡;在應(yīng)用層及時(shí)監(jiān)聽(tīng)熱插拔事件并采用Select阻塞機(jī)制,達(dá)到盡量少的占用CPU資源。

4.2 驅(qū)動(dòng)程序?qū)崿F(xiàn)

驅(qū)動(dòng)程序的作用在于為應(yīng)用程序提供機(jī)制,它是內(nèi)核的一部分。該驅(qū)動(dòng)程序?qū)崿F(xiàn)了設(shè)備初始化,在內(nèi)核和設(shè)備間相互傳送數(shù)據(jù),讀取、回送數(shù)據(jù),檢測(cè)錯(cuò)誤等功能,開(kāi)發(fā)的難點(diǎn)在于高效請(qǐng)求處理、中斷、1/O操作等方面功能設(shè)計(jì)。

5 結(jié)語(yǔ)

本文通過(guò)系統(tǒng)驅(qū)動(dòng)程序的設(shè)計(jì)流程分析,研究程序開(kāi)發(fā)的接口和數(shù)據(jù)結(jié)構(gòu),對(duì)CF卡進(jìn)行配置,研究開(kāi)發(fā)驅(qū)動(dòng)程序,實(shí)現(xiàn)了CF卡存儲(chǔ)備份和快速熱插拔,使其便于在其他系統(tǒng)中應(yīng)用。

參考文獻(xiàn)

[1]嵌入式Linux 中CF卡的管理研究[EB/OL].140.112.99.135/ntu/showthread.php?threadid=67.

第4篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

windows nt是一個(gè)功能全面的操作系統(tǒng),具有完全集成式的連網(wǎng)能力,它的網(wǎng)絡(luò)模型開(kāi)始于mac子層,網(wǎng)絡(luò)接口卡(network interface card以后簡(jiǎn)稱網(wǎng)卡或nic)驅(qū)動(dòng)程序駐留在其中。通過(guò)相關(guān)的網(wǎng)卡把windows nt與網(wǎng)絡(luò)連接起來(lái),但一直到80年代后期,許多傳輸協(xié)議的實(shí)現(xiàn)受限于mac層接口的獨(dú)特實(shí)現(xiàn),因?yàn)閙ac層定義了協(xié)議與網(wǎng)卡之間的轉(zhuǎn)換機(jī)制。

1989年,microsoft和3com兩公司提出了一個(gè)定義mac層與osi模型高層協(xié)議驅(qū)動(dòng)程序之間的網(wǎng)絡(luò)設(shè)備接口規(guī)范(network device interface specification : ndis),ndis給數(shù)據(jù)交換提出了一個(gè)靈活的環(huán)境,它規(guī)范了軟件接口──稱為ndis接口,傳輸協(xié)議可用它與網(wǎng)卡驅(qū)動(dòng)程序進(jìn)行通信。因此在windows nt環(huán)境下開(kāi)發(fā)核心態(tài)網(wǎng)卡驅(qū)動(dòng)程序應(yīng)遵循ndis規(guī)范。

對(duì)于高速網(wǎng)絡(luò)fddi(fiber distributed data interface)網(wǎng)卡驅(qū)動(dòng)程序還需要smt(station management)站管理功能的實(shí)現(xiàn),否則將不能作為一個(gè)fddi站連入環(huán)結(jié)構(gòu)中,只能實(shí)現(xiàn)點(diǎn)到點(diǎn)間的數(shù)據(jù)通信。故有必要將smt軟件移植到網(wǎng)卡驅(qū)動(dòng)程序中,這將又導(dǎo)致對(duì)miniport nic驅(qū)動(dòng)程序編程框架的破壞,于是有必要形成fddi網(wǎng)卡驅(qū)動(dòng)程序(包含smt)與windows nt操作系統(tǒng)的良好接口──由邏輯網(wǎng)卡的注冊(cè)和mac層驅(qū)動(dòng)程序的初始化來(lái)完成。

所以,本課題旨在深入研究應(yīng)用microsoft公司的ddk(device driver kit)將smt移植于windows nt的fddi網(wǎng)卡驅(qū)動(dòng)程序過(guò)程中如何注冊(cè)miniport nic驅(qū)動(dòng)程序。即怎樣正確注冊(cè)邏輯網(wǎng)卡和mac驅(qū)動(dòng)程序的初始化。著重討論與初始化相關(guān)的上邊緣函數(shù)的使用和調(diào)用關(guān)系以及初始化過(guò)程中遇到的各種問(wèn)題的具體解決。

第一章windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動(dòng)程序

總體結(jié)構(gòu)介紹

第一節(jié)windows nt網(wǎng)絡(luò)結(jié)構(gòu)

§1.1.1 windows nt網(wǎng)絡(luò)體系結(jié)構(gòu)

windows nt的網(wǎng)絡(luò)體系結(jié)構(gòu)是基于國(guó)際標(biāo)準(zhǔn)化(iso)制定的標(biāo)準(zhǔn)模型──開(kāi)放式系統(tǒng)互連(open system interconnection:osi)參考模型分層建立的,這種方式有利于隨時(shí)擴(kuò)展其它功能和服務(wù)。

windows nt網(wǎng)絡(luò)模型開(kāi)始于mac子層,網(wǎng)卡驅(qū)動(dòng)程序就駐留在其中。它通過(guò)相關(guān)的網(wǎng)卡把windows nt與網(wǎng)絡(luò)連接起來(lái),圖中的多個(gè)網(wǎng)卡表明在一臺(tái)運(yùn)行windows nt的計(jì)算機(jī)上能使用多種網(wǎng)卡。

這一網(wǎng)絡(luò)體系結(jié)構(gòu)包括兩個(gè)重要接口──ndis接口與傳輸驅(qū)動(dòng)

程序接口(tdi)。這兩個(gè)接口把兩個(gè)層隔離開(kāi)來(lái),辦法是相鄰的部件只允許按單一的標(biāo)準(zhǔn)來(lái)寫,不允許多重標(biāo)準(zhǔn)。例如一個(gè)網(wǎng)卡驅(qū)動(dòng)程序(在ndis接口的下面)就不需要特地按每個(gè)傳輸協(xié)議來(lái)寫它的代碼塊,恰恰相反,該驅(qū)動(dòng)程序是寫給ndis接口的,它通過(guò)符合ndis的相應(yīng)傳輸協(xié)議來(lái)請(qǐng)求服務(wù)。這些接口包含在windows nt的網(wǎng)絡(luò)體系結(jié)構(gòu)中,以容納可移植、可互換的模塊。

在兩個(gè)接口之間,是傳輸協(xié)議。它在網(wǎng)絡(luò)中起著組織者的作用。一個(gè)傳輸協(xié)議規(guī)定了數(shù)據(jù)以何種方式呈遞給下一個(gè)接收層,以及如何對(duì)數(shù)據(jù)相應(yīng)地進(jìn)行打包。它通過(guò)ndis把數(shù)據(jù)傳給網(wǎng)卡驅(qū)動(dòng)程序,并通過(guò)tdi把數(shù)據(jù)傳給轉(zhuǎn)發(fā)程序(redirector)

tdi之上是轉(zhuǎn)發(fā)程序,它把本地的網(wǎng)絡(luò)資源申請(qǐng)轉(zhuǎn)送給網(wǎng)絡(luò)。

為了能和其他廠商的網(wǎng)絡(luò)互連,windows nt允許有多個(gè)轉(zhuǎn)發(fā)程序。對(duì)于每一個(gè)轉(zhuǎn)發(fā)程序windows nt計(jì)算機(jī)必須也有一個(gè)相應(yīng)的供應(yīng)者(provider)(由網(wǎng)絡(luò)廠商提供)。多供應(yīng)者路由選擇程序決定適當(dāng)?shù)墓?yīng)者,然后借助于供應(yīng)者,對(duì)應(yīng)用請(qǐng)求到相應(yīng)的轉(zhuǎn)發(fā)程序做出選擇。

§1.1.2 windows nt網(wǎng)絡(luò)驅(qū)動(dòng)程序

windows nt支持兩種類型的網(wǎng)絡(luò)驅(qū)動(dòng)程序

傳輸驅(qū)動(dòng)程序

實(shí)現(xiàn)數(shù)據(jù)鏈路層中的邏輯鏈路控制子層協(xié)議和傳輸層協(xié)議。向 下與ndis接口,向上與tdi接口。

網(wǎng)卡驅(qū)動(dòng)程序

實(shí)現(xiàn)對(duì)物理層的管理和數(shù)據(jù)鏈路層中介質(zhì)訪問(wèn)控制子層協(xié)議,通過(guò)ndis向下管理物理網(wǎng)卡,向上與傳輸驅(qū)動(dòng)程序通信。

§1.1.3 windows nt網(wǎng)卡驅(qū)動(dòng)程序

windows nt環(huán)境下的網(wǎng)卡驅(qū)動(dòng)程序也分為兩種:

miniport網(wǎng)卡驅(qū)動(dòng)程序:miniport驅(qū)動(dòng)程序只須實(shí)現(xiàn)與網(wǎng)絡(luò)硬件相關(guān)的操作(包括發(fā)送和接收)。而所有底層網(wǎng)卡驅(qū)動(dòng)程序的通用操作(如同步),一般由ndis接口程序來(lái)實(shí)現(xiàn)。

full網(wǎng)卡驅(qū)動(dòng)程序:full網(wǎng)卡驅(qū)動(dòng)程序必須實(shí)現(xiàn)所有硬件相關(guān)和同步、排隊(duì)等操作。例如full網(wǎng)卡驅(qū)動(dòng)程序?yàn)榱隧憫?yīng)數(shù)據(jù)接收,需要保持本身的捆綁信息,而miniport就可以由ndis接口庫(kù)來(lái)實(shí)現(xiàn)。

在windows nt的早期版本中,full網(wǎng)卡驅(qū)動(dòng)程序要求開(kāi)發(fā)者實(shí)現(xiàn)許多底層操作,來(lái)處理多處理器的核心問(wèn)題以及處理器、線程的同步,這樣不同的開(kāi)發(fā)者在大量重復(fù)著許多相同的工作。

而miniport網(wǎng)卡驅(qū)動(dòng)程序允許開(kāi)發(fā)者僅僅寫一些與網(wǎng)絡(luò)硬件相關(guān)的代碼即可,而那些通用的函數(shù)由ndis接口庫(kù)來(lái)實(shí)現(xiàn),這樣開(kāi)發(fā)出來(lái)的驅(qū)動(dòng)程序減少了不必要的工作。

第二節(jié)miniport驅(qū)動(dòng)程序的結(jié)構(gòu)

ndis接口規(guī)范了網(wǎng)卡驅(qū)動(dòng)程序的實(shí)現(xiàn),同時(shí)也對(duì)tdi驅(qū)動(dòng)程序的實(shí)現(xiàn)提出了一定的要求,在nt中,ndis約束下的網(wǎng)卡驅(qū)動(dòng)程序、tdi驅(qū)動(dòng)程序和系統(tǒng)的關(guān)系如下圖所示:

圖2.0 ndis約束下的網(wǎng)卡驅(qū)動(dòng)程序、tdi驅(qū)動(dòng)程序和系統(tǒng)的關(guān)系

miniport驅(qū)動(dòng)程序包括驅(qū)動(dòng)程序?qū)ο?、?qū)動(dòng)程序源代碼和ndis接口庫(kù)代碼。windows nt ddk提供ndis.h作為miniport驅(qū)動(dòng)程序的主要頭文件,定義了miniport驅(qū)動(dòng)程序的入口點(diǎn)、ndis接口庫(kù)函數(shù)和通用數(shù)據(jù)結(jié)構(gòu)。

上邊緣函數(shù)的作用是網(wǎng)卡驅(qū)動(dòng)與ndis接口庫(kù)進(jìn)行通信,而下邊緣函數(shù)是tdi協(xié)議驅(qū)動(dòng)程序與ndis通信的手段。

§1.2.1 miniport網(wǎng)卡對(duì)象

ndis用一個(gè)叫做邏輯網(wǎng)卡的軟件對(duì)象來(lái)描述系統(tǒng)中的每塊網(wǎng)卡,而邏輯網(wǎng)卡與windows nt設(shè)備對(duì)象的通信由i/o子系統(tǒng)來(lái)管理,描述網(wǎng)卡的設(shè)備對(duì)象包括相關(guān)的網(wǎng)絡(luò)信息如名字、網(wǎng)絡(luò)地址和網(wǎng)卡內(nèi)存基地址等,它還包含與硬件相關(guān)的驅(qū)動(dòng)程序狀態(tài)數(shù)據(jù)(捆綁數(shù)目,捆綁句柄,包過(guò)濾數(shù)據(jù)庫(kù)等)。ndis分配一個(gè)句柄到miniportinitialize這個(gè)上邊緣函數(shù)的一個(gè)結(jié)構(gòu)中,然后miniport網(wǎng)卡驅(qū)動(dòng)程序?qū)⒃谝院筇峁┻@個(gè)句柄來(lái)給ndis調(diào)用,這個(gè)結(jié)構(gòu)一直被ndis保持,并且對(duì)miniport驅(qū)動(dòng)程序不透明。

當(dāng)miniport網(wǎng)卡驅(qū)動(dòng)程序初始化一塊網(wǎng)卡時(shí),它創(chuàng)立自己的內(nèi)部數(shù)據(jù)結(jié)構(gòu)來(lái)描述網(wǎng)卡,記錄需要它管理的與設(shè)備相關(guān)的狀態(tài)信息。當(dāng)miniport網(wǎng)卡驅(qū)動(dòng)程序調(diào)用ndismsetatttibutes或ndismsetattributesex兩ndis庫(kù)函數(shù)時(shí),它傳遞一個(gè)句柄給這數(shù)據(jù)結(jié)構(gòu)。這樣,當(dāng)調(diào)用miniport驅(qū)動(dòng)程序入口點(diǎn)時(shí),它就傳遞這個(gè)句柄來(lái)驗(yàn)證驅(qū)動(dòng)程序所對(duì)應(yīng)的網(wǎng)卡的正確性。這個(gè)數(shù)據(jù)結(jié)構(gòu)為miniport網(wǎng)卡驅(qū)動(dòng)程序所擁有并維護(hù)。

§1.2.2網(wǎng)絡(luò)對(duì)象標(biāo)識(shí)符

miniport nic驅(qū)動(dòng)程序還需要維護(hù)一組對(duì)象,這些對(duì)象是系統(tǒng)定義的對(duì)象標(biāo)識(shí)符(object idetifier:oid)來(lái)標(biāo)識(shí),以描述驅(qū)動(dòng)程序的性能和當(dāng)前狀態(tài)信息。為查詢這些信息,上層驅(qū)動(dòng)程序調(diào)用ndisrequest向ndis接口庫(kù)指示oid。oid表示了調(diào)用所需的信息類型,如miniport驅(qū)動(dòng)程序所支持的lookahead緩沖區(qū)大小等。ndis接到上層驅(qū)動(dòng)程序的查詢請(qǐng)求,將oid傳遞給上邊緣函數(shù)miniportqueryinformation實(shí)現(xiàn)對(duì)oid的查詢,如果上層驅(qū)動(dòng)程序請(qǐng)求改變狀態(tài)信息則調(diào)用miniportsetinformation實(shí)現(xiàn)對(duì)oid的設(shè)置。

§1.2.3 miniport網(wǎng)卡驅(qū)動(dòng)程序代碼

典型的miniport nic驅(qū)動(dòng)程序必須有一些函數(shù)來(lái)通過(guò)ndis接口實(shí)現(xiàn)上層驅(qū)動(dòng)程序與硬件的通信。這些函數(shù)稱為上邊緣服務(wù)函數(shù)。

這些上邊緣服務(wù)函數(shù)由驅(qū)動(dòng)程序的開(kāi)發(fā)者根據(jù)驅(qū)動(dòng)程序面向的特定低層網(wǎng)絡(luò)類型和硬件以及相應(yīng)環(huán)境,可以有選擇地實(shí)現(xiàn),但必須保證驅(qū)動(dòng)程序最基本的功能,這些基本功能包括初始化、發(fā)送、中斷處理、重置、參數(shù)查詢與設(shè)置和報(bào)文接收。

miniportinitialize:操作系統(tǒng)根據(jù)系統(tǒng)配置信息,檢測(cè)出網(wǎng)卡已安裝時(shí),由ndis接口在初始化時(shí)調(diào)用,主要完成低層網(wǎng)絡(luò)類型確定,對(duì)應(yīng)于物理網(wǎng)卡的邏輯網(wǎng)卡初始化,中斷信息注冊(cè),網(wǎng)卡與主機(jī)通訊方式的確認(rèn)。i/o端口的申請(qǐng)與注冊(cè),內(nèi)存映像,mib的初始化,物理網(wǎng)卡的驗(yàn)證與初始化等。

miniportreconfigure:支持網(wǎng)卡參數(shù)動(dòng)態(tài)變化,和miniportinitilize一樣由ndis接口以初始化級(jí)別調(diào)度執(zhí)行(不能屏蔽中斷,必須由驅(qū)動(dòng)程序承認(rèn)并清除在此期間產(chǎn)生的中斷),支持即插即用和軟配置的網(wǎng)卡在動(dòng)態(tài)改變參數(shù)時(shí),必須提供此函數(shù)。

miniportqueryinformation:查詢網(wǎng)卡的狀態(tài)以及網(wǎng)卡驅(qū)動(dòng)程序的操作或統(tǒng)計(jì)參數(shù),如是否支持組通訊、網(wǎng)卡的物理速率是否支持回環(huán)、是否支持直接拷貝等,這些參數(shù)以oid方式統(tǒng)一管理。

miniportsetinformation:ndis接口或協(xié)議驅(qū)動(dòng)程序通過(guò)調(diào)用此接口改變驅(qū)動(dòng)程序維護(hù)的oid庫(kù),一些操作參數(shù)的改變也將同時(shí)改變驅(qū)動(dòng)程序狀態(tài),例如組地址的設(shè)置。

miniportreset:包括網(wǎng)卡硬件重置和驅(qū)動(dòng)程序軟件重置,軟件重置包括驅(qū)動(dòng)程序狀態(tài)重置,以及一些相關(guān)的參數(shù)重置,還需考慮有些參數(shù)的恢復(fù),重置時(shí)不必完成所有正在活躍的外部請(qǐng)求,但必須釋放已占用的外部資源。

miniporthalt:掛起網(wǎng)卡并釋放該網(wǎng)卡驅(qū)動(dòng)程序占用的所有資源,在此期間不屏蔽中斷。

miniportisr:高優(yōu)先級(jí)的中斷處理程序,進(jìn)行的工作包括初始中斷處理類型,決定是否進(jìn)行中斷轉(zhuǎn)交,對(duì)卡上中斷進(jìn)行處理 等,該服務(wù)類型只在以下情況被調(diào)用:

ndis接口調(diào)用miniportinitialize和miniporthalt兩函數(shù)時(shí)。

.中斷處理類型設(shè)為每此中斷處理過(guò)程都調(diào)用時(shí)。

為使系統(tǒng)能及時(shí)響應(yīng)所有硬件中斷,高優(yōu)先級(jí)的硬件中斷處理程序應(yīng)盡可能的減少運(yùn)行時(shí)間,防止長(zhǎng)時(shí)間的屏蔽低優(yōu)先級(jí)中斷,避免造程中斷丟失。

miniporthandleinterrupt:由中斷延時(shí)處理程序在中斷延時(shí)處理時(shí)進(jìn)行調(diào)用。ndis排隊(duì)所有的延時(shí)處理,該服務(wù)主要處理發(fā)送完成、報(bào)文接收、描述符用盡、溢出、網(wǎng)卡異常等中斷。

miniportsend:ndis收到上層發(fā)送請(qǐng)求時(shí)經(jīng)過(guò)若干協(xié)議處理再向下調(diào)用此服務(wù)過(guò)程,發(fā)送的packet已含有l(wèi)lc和mac頭,該服務(wù)過(guò)程進(jìn)行邊界對(duì)齊、packet約束重整、描述符映射和報(bào)文發(fā)送、以及發(fā)送資源和packet緩沖隊(duì)列管理。

miniporttransferdata:多個(gè)已和網(wǎng)卡捆綁的協(xié)議驅(qū)動(dòng)程序在接收到報(bào)文到達(dá)指示后,向網(wǎng)卡驅(qū)動(dòng)程序發(fā)出傳送請(qǐng)求以拷貝各自所需的報(bào)文數(shù)據(jù)部分,網(wǎng)卡驅(qū)動(dòng)程序根據(jù)各協(xié)議驅(qū)動(dòng)程序?qū)蝹€(gè)packet是否進(jìn)行多次拷貝,以決定是否暫存只允許單次拷貝的packet等。

miniportcheckhandle:ndis每秒調(diào)用此服務(wù)函數(shù)一次,驅(qū)動(dòng)程序發(fā)現(xiàn)網(wǎng)卡異常時(shí)報(bào)告給ndis由ndis調(diào)用miniportreset進(jìn)行硬件重恢復(fù)。

miniportenableintrrupt:中斷使能。

miniportdisableinterrupt:中斷屏蔽。

另外,每個(gè)網(wǎng)卡驅(qū)動(dòng)程序必須有一個(gè)初始化入口點(diǎn),由driver entry函數(shù)實(shí)現(xiàn),它和系統(tǒng)相關(guān),由操作系統(tǒng)在裝入驅(qū)動(dòng)程序時(shí)調(diào)用,主要完成初始化ndis wrapper,再由wrapper初始生成驅(qū)動(dòng)程序管理塊并完成相應(yīng)各種初始化工作,登錄網(wǎng)卡驅(qū)動(dòng)程序所有上邊緣服務(wù)入口點(diǎn),同時(shí)寫入ndis版本信息。

§1.2.4 ndis接口庫(kù)

ndis接口庫(kù)包括在ndis.sys中,它是一個(gè)核態(tài)函數(shù)庫(kù),有一套抽象的函數(shù),無(wú)論協(xié)議驅(qū)動(dòng)程序還是nic驅(qū)動(dòng)程序都連接到這個(gè)庫(kù)中,以實(shí)現(xiàn)上下層之間的操作。

第二章fddi網(wǎng)卡驅(qū)動(dòng)程序的加載和運(yùn)行

第一節(jié) 網(wǎng)卡驅(qū)動(dòng)程序的安裝

windows nt網(wǎng)卡驅(qū)動(dòng)程序安裝的目的是實(shí)現(xiàn)網(wǎng)卡相應(yīng)硬件信息和驅(qū)動(dòng)程序在windows nt注冊(cè)庫(kù)中的注冊(cè),使windows nt能夠正確識(shí)別網(wǎng)卡,了解所必需的軟硬件信息并能在windows nt啟動(dòng)時(shí)加載相應(yīng)驅(qū)動(dòng)程序。

網(wǎng)卡驅(qū)動(dòng)程序安裝時(shí),首先在主群組的控制面板中選擇“網(wǎng)絡(luò)”,然后添加網(wǎng)卡,指定相應(yīng)信息文件──oemsetup.inf的路徑,以完成以下兩個(gè)必要的操作:

復(fù)制驅(qū)動(dòng)程序到相應(yīng)的系統(tǒng)目錄(windows nt根目錄\system32\drivers\)中;

在windows nt注冊(cè)庫(kù)中存入相應(yīng)軟硬件信息。

下面主要以fddi網(wǎng)卡為例介紹安裝驅(qū)動(dòng)程序所必需的工作:

§2.1.1網(wǎng)卡一般硬件參數(shù)

對(duì)于fddi網(wǎng)卡,必須在編寫其oemsetup.inf文件時(shí)確定以下硬件參數(shù):

總線類型:pci(5)……括號(hào)中的數(shù)字5表示pci總線在ndis中的總線類型代碼;

廠商代號(hào):0x5588……系統(tǒng)加載時(shí)確定網(wǎng)卡的標(biāo)記,也是編程時(shí)確定pci槽號(hào)的標(biāo)識(shí);

cfid: 0x01;

介質(zhì)類型:光纖(3) ……括號(hào)中的數(shù)字表示光纖在ndis中的介質(zhì)類型代碼;

是否支持全雙工:支持。

對(duì)于其它的硬件信息在此inf配置信息文件中可有可無(wú),如若配置,則可在驅(qū)動(dòng)程序的編寫時(shí)利用這些信息,方便編程,同時(shí)有利于其它應(yīng)用對(duì)其參數(shù)的確定和使用。

§2.1.2 fddi網(wǎng)卡加載時(shí)需在注冊(cè)庫(kù)登錄表里做的網(wǎng)絡(luò)配置

網(wǎng)卡驅(qū)動(dòng)程序的安裝通常將創(chuàng)建登錄表中的四個(gè)不同子鍵:

software registrion鍵,對(duì)應(yīng)于驅(qū)動(dòng)程序,存在于hkey_local_machine\software\company\ productname\version中。我們的fddi網(wǎng)卡驅(qū)動(dòng)程序所對(duì)應(yīng)的是hkey_local_machine\software\net612\yhfddi\yhfddi1.0;

網(wǎng)卡的軟件登錄鍵,存在于hkey_local_machine\software\microsoft\ windows nt\nt3.51\networkcards\yhfddi1;

驅(qū)動(dòng)程序的服務(wù)登錄鍵,存在于hkey_local_machine\system\currentcontrolset\services

網(wǎng)卡的服務(wù)登錄鍵,存在于hkey_local_machine\system\currentcontrolset\services

對(duì)于每一個(gè)網(wǎng)絡(luò)部件,一個(gè)名為netrules的特殊子鍵在鄰近的驅(qū)動(dòng)程序或網(wǎng)卡登錄子鍵里創(chuàng)建,netrules標(biāo)識(shí)網(wǎng)絡(luò)部件為網(wǎng)絡(luò)整體的一部分。

fddi網(wǎng)卡驅(qū)動(dòng)程序?qū)?yīng)的標(biāo)準(zhǔn)軟件登錄表項(xiàng)將出現(xiàn)在以下路徑:

hkey_local_machine\software\net612\yhfddi\yhfddi1.0;

驅(qū)動(dòng)程序?qū)?yīng)的標(biāo)準(zhǔn)項(xiàng)的值為:

description =yhfddi/pci adapter controller

install date =……

……

refcount =0x01

servicename =yhfddi

softwaretype =driver

title =yhfddi/pci adapter controller

而且在yhfddi驅(qū)動(dòng)程序相關(guān)的netrules子鍵下,這些值項(xiàng)為:

bindable =yhfddi driver yhfddi adapter non exclusiver

bindform =“yhfddisys”yes no container

class = reg_multi_sz “yhfddi driver basic”

infname =oemnad1.inf

type =yhfddisys ndisdriver yhfddidriver

use =driver

yhfddi網(wǎng)卡在如下路徑的networkcards子鍵里介紹:

hkey_local_machine\software\microsoft\

windows nt\nt3.51\networkcards\yhfddi1;

網(wǎng)卡的標(biāo)準(zhǔn)項(xiàng)包括以下這些值:

description =yhfddi/pci adapter controller

install date =……

manufacturer =net612

productname =yhfddi

servicename =yhfddi01

title =[01]yhfddi/pci adapter controller

§2.1.3編寫inf信息配置文件

gui inf描述語(yǔ)言被windows nt用以書寫系統(tǒng)所有部件的配置文件,當(dāng)然也可以用以書寫網(wǎng)絡(luò)系統(tǒng)各部件的配置文件,該配置文件描述了網(wǎng)絡(luò)部件安裝、配置、刪除的執(zhí)行過(guò)程。當(dāng)網(wǎng)絡(luò)部件進(jìn)行初始安裝或二次安裝(通常通過(guò)ncpa進(jìn)行)時(shí),安裝程序讀取部件對(duì)應(yīng)的配置文件,進(jìn)行解釋執(zhí)行。gui inf描述語(yǔ)言由節(jié)、命令、邏輯操作、變量規(guī)范、流程控制以及一套調(diào)用dll或外部程序的機(jī)制組成,其中,節(jié)是配置文件的主體,節(jié)可分為install節(jié)(類似于函數(shù)),shell節(jié)(也類似于函數(shù),但可調(diào)用insall和shell節(jié)),detect節(jié)(不包含命令),一個(gè)配置文件一般由若干不同類型的節(jié)組成。驅(qū)動(dòng)程序的開(kāi)發(fā)者根據(jù)需要可以在配置文件中編寫相應(yīng)代碼,使得用戶和系統(tǒng)之間能進(jìn)行交互,并且由用戶決定一些配置參數(shù)。

nt網(wǎng)卡配置文件有其一套規(guī)范,驅(qū)動(dòng)程序開(kāi)發(fā)者必須按規(guī)范編寫配置文件,一般來(lái)說(shuō),一個(gè)配置文件至少應(yīng)該提供下面三個(gè)節(jié):

安裝入口點(diǎn):[identify]shell節(jié)。該節(jié)主要功能是給出安裝部件的類型名,系統(tǒng)通過(guò)它識(shí)別該部件屬于哪一大類(display,mouse,scsi,network等)中的哪一類(網(wǎng)絡(luò)adapter,driver,transport,service,network和netprovidor),同時(shí),還需要給出映像文件和配置文件所在的源介質(zhì)及標(biāo)識(shí)。

[returnoption]shell節(jié)。系統(tǒng)執(zhí)行安裝identify節(jié)后,執(zhí)行該節(jié)。它主要功能是檢查所需安裝的部件是否支持的硬件平臺(tái)和語(yǔ)言,并給出網(wǎng)卡名(有些配置文件支持多類網(wǎng)卡,此時(shí)必須讓用戶進(jìn)行選擇,并獲得選擇結(jié)果)。

[installoption]shell節(jié)。該節(jié)是配置文件得主體,也是上次安裝完后再次進(jìn)行配置、刪除、更新的入口點(diǎn)。主要功能是拷貝映像文件和配置文件,生成配置的各種選項(xiàng),創(chuàng)建該部件在注冊(cè)庫(kù)中對(duì)應(yīng)的各種登錄子樹(shù)并更新重寫。

第二節(jié) 驅(qū)動(dòng)程序的加載過(guò)程

§2.2.1 windows nt的啟動(dòng)過(guò)程

第5篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

關(guān)鍵詞:WDMDriver;Windows;例程;DLL

中圖分類號(hào):TP316文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)33-9557-02

Study about WDM-based I/O Device Driver

SUN Hu-jun

(Department of Computer Engineering, Xi'an Aerotechnical College, Xi'an 710077, China)

Abstract: This article describes the characteristics and structure of the WDM; Describes I/O device driver a basic component;Discusses the DLL in the practical application significance.

Key words: WDMDriver; Windows; distance; DLL

在計(jì)算機(jī)應(yīng)用系統(tǒng)和控制系統(tǒng)的開(kāi)發(fā)過(guò)程中,通常需要在Windows 環(huán)境下,直接訪問(wèn)和控制具有特定功能的硬件設(shè)備。由于操作系統(tǒng)版本不同,其運(yùn)行機(jī)制必然存在差異。在這里針對(duì)驅(qū)動(dòng)程序的運(yùn)行機(jī)制主要分為兩類。一類是以前的Dos 和Windows98系統(tǒng),在這類環(huán)境下可以直接完成對(duì)I/O 端口的讀寫;另一類是NT4.0以上版本W(wǎng)indows系統(tǒng),在這類環(huán)境下,為了使系統(tǒng)變得更為安全,Windows對(duì)系統(tǒng)底層操作采取了屏蔽策略,不允許用戶態(tài)的應(yīng)用程序直接訪問(wèn)I/O端口,而是通過(guò)編寫驅(qū)動(dòng)程序,這樣可以使用Kernel層設(shè)備驅(qū)動(dòng)程序提供的各種服務(wù)間接地訪問(wèn)I/O,因此編寫I/O設(shè)備驅(qū)動(dòng)程序極為重要。

為了解決I/O設(shè)備驅(qū)動(dòng)程序和不同結(jié)構(gòu)操作系統(tǒng)的兼容性[3],微軟公司在 1997年提出了一種全新的Windows 驅(qū)動(dòng)程序模式(WDM),支持即插即用、電源管理和WMI技術(shù),為存在于Windows 9x 和Windows 2000 操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序提供了統(tǒng)一的參考框架。

1 WDM系統(tǒng)函數(shù)

WDM 驅(qū)動(dòng)程序包含了許多子例程,操作系統(tǒng)通過(guò)調(diào)用相關(guān)例程來(lái)執(zhí)行針對(duì)I/O 請(qǐng)求包的各種操作[1]。WDM 驅(qū)動(dòng)程序可執(zhí)行包中的內(nèi)容如下:

1.1 基本驅(qū)動(dòng)程序與設(shè)備操作

DrvierEntry、 AddDevice

① DriverEntry例程負(fù)責(zé)初始化程序范圍的數(shù)據(jù)結(jié)構(gòu)和資源。

② AddDevice例程是被系統(tǒng)調(diào)用,進(jìn)行初始化一個(gè)被枚舉的新設(shè)備。

1.2 I/O 控制

DpcForIsr、OnInterrupt、StartIo、AdapterControl

① StartIo例程進(jìn)行串行處理,對(duì)IRP進(jìn)行排隊(duì)。

② AdaperControl例程負(fù)責(zé)執(zhí)行DMA 傳輸。

③ OnInterrupt是一個(gè)中斷服務(wù)例程。

④ DPC是一個(gè)延遲過(guò)程調(diào)用例程。

1.3 派發(fā)功能函數(shù)

DispatchWriter、DispatchRead、DispatchWmi、DispatchPnp DispatchPower

Dispatch為調(diào)度例程,負(fù)責(zé)處理應(yīng)用程序與驅(qū)動(dòng)程序之間的通信,包括Writer,Read等,開(kāi)發(fā)人員必須選擇特定驅(qū)動(dòng)中需要的例程。

1.4 設(shè)備的創(chuàng)建和初始化

1) 內(nèi)核模式驅(qū)動(dòng)程序沒(méi)有main或WinMain,而是由I/O管理器根據(jù)需要調(diào)用一個(gè)驅(qū)動(dòng)程序例程:① 驅(qū)動(dòng)程序被裝入時(shí);② 驅(qū)動(dòng)程序被卸出或系統(tǒng)關(guān)閉時(shí);③ 用戶程序發(fā)出I/O系統(tǒng)服務(wù)調(diào)用時(shí);④ 共享硬件資源對(duì)驅(qū)動(dòng)程序可用時(shí);⑤ 設(shè)備操作過(guò)程中的任何時(shí)候。

2) 相關(guān)內(nèi)容:① 所有驅(qū)動(dòng)程序必須包含DriverEntry例程,進(jìn)行驅(qū)動(dòng)程序初始化。② 利用AddDevice函數(shù)負(fù)責(zé)創(chuàng)建一個(gè)設(shè)備對(duì)象,并建立一個(gè)私有的設(shè)備擴(kuò)展對(duì)象。③ 給出設(shè)備名并創(chuàng)建符號(hào)連接名或者注冊(cè)設(shè)備接口。④ 初始化設(shè)備擴(kuò)展和設(shè)備對(duì)象的標(biāo)志位。⑤ 把新設(shè)備對(duì)象附著到設(shè)備堆棧中。

2 硬件的訪問(wèn)及資源分配

PnP管理器使用IRP來(lái)指導(dǎo)驅(qū)動(dòng)程序啟動(dòng)、停止和刪除設(shè)備,并查詢驅(qū)動(dòng)程序的設(shè)備,WDM是PnP驅(qū)動(dòng)程序,必須具備PnP例程。IRP是DDK定義的一個(gè)數(shù)據(jù)結(jié)構(gòu)。當(dāng)驅(qū)動(dòng)程序接收到PnP子碼IRP_MN_START_DEVICE 時(shí),IRP堆棧列表內(nèi)的兩個(gè)字段AllocatedResourcesTranslated 和AllocatedResources,列出分配的資源。

用來(lái)描述這些資源的結(jié)構(gòu)是CM_PARTIAL_RESOURCE_LIST 類型,它包括一個(gè)CM_PARTIAL_RESOURCE_DESCRIPTOR 結(jié)構(gòu)的計(jì)數(shù)數(shù)組。

數(shù)組中每一個(gè)資源描述符都有一個(gè)Type 成員[3],它表示所代表的資源的類型。主要有4個(gè)重要的共同體類型是Port(端口)、Interrupt(中斷)、Memory(內(nèi)存)、Dma(直接內(nèi)存訪問(wèn))。得到了設(shè)備的I/O地址,就可以對(duì)設(shè)備進(jìn)行讀取了,在讀寫端口地址和內(nèi)存時(shí)應(yīng)該使用標(biāo)準(zhǔn)的內(nèi)核讀取例程,在WDM 中應(yīng)使用HAL宏等。這樣就可以不用考慮不同操作平臺(tái)的特性,也可以更好的適應(yīng)Windows 2000 多任務(wù),多進(jìn)程環(huán)境的要求。

在分配硬件資源時(shí),首先必須編輯安裝文件(inf文件),它包含了WDM 設(shè)備驅(qū)動(dòng)程序的制造商信息、要復(fù)制的文件列表、要?jiǎng)?chuàng)建的注冊(cè)表項(xiàng)等。INF 安裝文件向操作系統(tǒng)添加了硬件資源。當(dāng)驅(qū)動(dòng)程序收到IRP_MJ_PNP 的IRP_MN_START_DEVICE 的子碼時(shí),驅(qū)動(dòng)程序獲得設(shè)備的硬件資源。

3 動(dòng)態(tài)鏈接庫(kù)(.dll)

雖然驅(qū)動(dòng)程序是為設(shè)備硬件層編程服務(wù)的,但同樣需要和應(yīng)用程序進(jìn)行通信,從而最終達(dá)到應(yīng)用程序控制設(shè)備的目的。

通常情況下,應(yīng)用程序通過(guò)專用的API 函數(shù)操作硬件,但由于這些函數(shù)攜帶參數(shù)很多,使用起來(lái)并不方便,因此可以另外開(kāi)發(fā)一套用于中轉(zhuǎn)數(shù)據(jù)的功能函數(shù)集(動(dòng)態(tài)鏈接庫(kù)),可以使得底層驅(qū)動(dòng)設(shè)備對(duì)用戶是透明的[2]。采用這種分層結(jié)構(gòu),應(yīng)用程序通過(guò)動(dòng)態(tài)鏈接庫(kù)(.dll)來(lái)存取I/O設(shè)備。動(dòng)態(tài)鏈接庫(kù)(.dll)提供給應(yīng)用程序最常用的接口函數(shù),包括設(shè)備初始化,關(guān)閉設(shè)備,存取端口等。在應(yīng)用程序中加入特定的動(dòng)態(tài)鏈接庫(kù)可以很方便的操作端口,并且可以重復(fù)使用,縮短了開(kāi)發(fā)周期。

4 結(jié)束語(yǔ)

WDM驅(qū)動(dòng)程序模型具有較好的可移植性:編寫驅(qū)動(dòng)程序時(shí),WDM規(guī)定只使用ANSI C標(biāo)準(zhǔn)規(guī)定的語(yǔ)言元素;硬件和軟件的可配置性靈活:使用HAL工具調(diào)用低級(jí)總線驅(qū)動(dòng)程序或?qū)崿F(xiàn)一個(gè)標(biāo)準(zhǔn)控制接口,避免直接引用硬件;使用注冊(cè)表作為配置信息的容器;可運(yùn)行在多處理器平臺(tái)上?;?WDM 驅(qū)動(dòng)模型設(shè)計(jì)的驅(qū)動(dòng)程序可以穩(wěn)定地在Windows 2000/XP/NT下運(yùn)行,可以更好的實(shí)現(xiàn)分布式的數(shù)據(jù)監(jiān)測(cè)和控制。

參考文獻(xiàn):

[1] 武安河.WDM設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2003.

[2] Cant C.Writing Windows WDM Device Drivers[M].孫義,譯.北京:機(jī)械工業(yè)出版社,2007.

[3] 李建.Windows2000下I/O設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)[D].北京:北方交通大學(xué),2003.

第6篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

0、引言

“面向?qū)ο蟪绦蛟O(shè)計(jì)”是軟件工程專業(yè)和計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一門專業(yè)核心課程。該課程是軟件工程等課程的先修課程,同時(shí)又是進(jìn)行軟件開(kāi)發(fā)的直接工具,是把所學(xué)的專業(yè)知識(shí)轉(zhuǎn)化為應(yīng)用的橋梁,是學(xué)生就業(yè)專業(yè)知識(shí)的關(guān)鍵技術(shù),所以該課程在整個(gè)教學(xué)體系中占據(jù)非常重要的地位。目前該課程在教學(xué)中仍普遍采用傳統(tǒng)的以語(yǔ)法講授為主線的課堂教學(xué)模式,從而導(dǎo)致學(xué)生學(xué)習(xí)該課程的主動(dòng)性和積極性不高,缺乏知識(shí)運(yùn)用和解決實(shí)際問(wèn)題的能力,教學(xué)效果也不理想。針對(duì)目前“面向?qū)ο蟪绦蛟O(shè)計(jì)”課程教學(xué)中存在的問(wèn)題,課程組將基于項(xiàng)目的教學(xué)方法應(yīng)用于該課程的教學(xué)實(shí)踐,并取得了初步成效。筆者從教學(xué)目標(biāo)、教學(xué)內(nèi)容、教學(xué)方法和手段、教學(xué)組織和教學(xué)評(píng)價(jià)等幾個(gè)方面介紹項(xiàng)目驅(qū)動(dòng)在“面向?qū)ο蟪绦蛟O(shè)計(jì)”課程教學(xué)改革中的應(yīng)用,并希望可以與工作在教學(xué)改革第一線的教學(xué)同行進(jìn)行交流和探討。

1、項(xiàng)目驅(qū)動(dòng)教學(xué)的理論基礎(chǔ)與認(rèn)知研究

1.1 目前課程教學(xué)中存在的問(wèn)題

面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)是一種全新的程序設(shè)計(jì)思想。但目前該課程大都以演繹的方式來(lái)教授,教學(xué)中存在重語(yǔ)言介紹、輕對(duì)象思想和方法傳授的情況,即在教學(xué)內(nèi)容的組織上是以特定的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言結(jié)構(gòu)組織的,從基本語(yǔ)言要素、語(yǔ)法和語(yǔ)句結(jié)構(gòu)組織,然后再舉一些例子說(shuō)明這些語(yǔ)句的應(yīng)用,而這些例子都是一些語(yǔ)言語(yǔ)法層面上的簡(jiǎn)單應(yīng)用,很少涉及實(shí)際問(wèn)題的解決。這種教學(xué)方式不僅不利于學(xué)生領(lǐng)會(huì)和理解面向?qū)ο蟮乃枷牒头椒?,更不利于培養(yǎng)學(xué)生使用面向?qū)ο蠓椒ń鉀Q實(shí)際問(wèn)題能力。

1.2 建構(gòu)主義

工程與科學(xué)教學(xué)中主要采用的演繹式教學(xué)法將課程或知識(shí)點(diǎn)作為學(xué)科內(nèi)一個(gè)自成系統(tǒng)的知識(shí)體系來(lái)處理。教師按照從一般原理到數(shù)學(xué)模型再到模型應(yīng)用這樣的方式進(jìn)行教學(xué),很少會(huì)提到為什么要這樣做,以及這樣的模型可以用來(lái)解決什么實(shí)際問(wèn)題,學(xué)生為什么要學(xué)習(xí)這些東西等,而學(xué)生的任務(wù)就是被動(dòng)地吸收這些知識(shí)。

在教育心理學(xué)中有一個(gè)公認(rèn)的準(zhǔn)則,就是只有當(dāng)人們清楚地意識(shí)到有必要去了解某個(gè)事物時(shí),他才會(huì)最為強(qiáng)烈地去主動(dòng)學(xué)習(xí)。如果只是告訴學(xué)生某項(xiàng)知識(shí)或技能在日后會(huì)用得到,并不能起到有效的激勵(lì)作用。

與傳統(tǒng)教育模式不同的建構(gòu)主義認(rèn)為學(xué)生的學(xué)習(xí)是將新的信息納入到自己已有的認(rèn)知框架中。因此,教育應(yīng)該從學(xué)生可能熟悉的內(nèi)容與經(jīng)歷出發(fā),與學(xué)生已有的知識(shí)結(jié)構(gòu)聯(lián)系起來(lái)。教學(xué)內(nèi)容應(yīng)該與實(shí)際應(yīng)用有關(guān),并與其他知識(shí)領(lǐng)域相關(guān)聯(lián),而不應(yīng)是抽象的或獨(dú)立的。教育者要?jiǎng)?chuàng)造條件引導(dǎo)學(xué)生自行建構(gòu)知識(shí),并從實(shí)踐經(jīng)歷中獲得證據(jù)來(lái)修正自己的知識(shí)建構(gòu)。

建構(gòu)主義支持歸納式的教學(xué),即教學(xué)不是從一般原理到應(yīng)用,而是首先從具體事物出發(fā),提出一個(gè)有待解決的實(shí)際問(wèn)題;然后教師在學(xué)生解決問(wèn)題的過(guò)程中向?qū)W生提供所需的信息,幫助學(xué)生把握事實(shí)、了解規(guī)則、知道程序、明白原理。項(xiàng)目驅(qū)動(dòng)的教學(xué)也是歸納式教學(xué)的一種。

1.3 認(rèn)知研究

心理學(xué)與神經(jīng)學(xué)方面的研究對(duì)歸納式的項(xiàng)目驅(qū)動(dòng)教學(xué)提供了強(qiáng)有力的支持。

布蘭斯福德(Bmnsf-ord)等人在文獻(xiàn)中指出:“凡是新的學(xué)習(xí)都涉及先前學(xué)習(xí)所得信息的轉(zhuǎn)移”,即學(xué)生對(duì)新知識(shí)的接受程度受已有知識(shí)的影響是很強(qiáng)的。如果新知識(shí)與學(xué)生已有知識(shí)或認(rèn)知有聯(lián)系或一致的話,學(xué)生學(xué)習(xí)起來(lái)較容易。項(xiàng)目驅(qū)動(dòng)教學(xué)是在學(xué)生能聯(lián)系起來(lái)的情景、問(wèn)題或應(yīng)用的背景下提出新的知識(shí)。因此,這樣的教學(xué)內(nèi)容能夠與學(xué)生已有的認(rèn)知結(jié)構(gòu)結(jié)合起來(lái),是有易于學(xué)生接受的。

學(xué)生的學(xué)習(xí)動(dòng)機(jī)會(huì)影響到學(xué)生愿意投入學(xué)習(xí)的時(shí)間的多少。如果學(xué)生發(fā)現(xiàn)學(xué)習(xí)的東西有用,而且能夠用來(lái)做一些對(duì)別人有影響的事情的話,學(xué)習(xí)就會(huì)更有積極性。項(xiàng)目驅(qū)動(dòng)的教學(xué)通過(guò)與實(shí)際應(yīng)用相關(guān)的項(xiàng)目來(lái)提供一門課程的教學(xué)內(nèi)容與技能。學(xué)生在學(xué)習(xí)的過(guò)程中能夠親身體會(huì)到所學(xué)知識(shí)的實(shí)用性。因此,這樣的教學(xué)方法能夠大大增進(jìn)學(xué)生學(xué)習(xí)的積極性。

此外,如果教學(xué)環(huán)境與實(shí)際工作環(huán)境相似,學(xué)生在日后就能夠很容易地將課程所學(xué)得的知識(shí)與技能移用到實(shí)際工作場(chǎng)景中。項(xiàng)目驅(qū)動(dòng)的教學(xué)圍繞真實(shí)的項(xiàng)目來(lái)組織教學(xué),因此有助于彌補(bǔ)學(xué)生的學(xué)習(xí)環(huán)境與實(shí)際工作環(huán)境兩者之間的不一致,從而有利于學(xué)生將所學(xué)的東西應(yīng)用到實(shí)際工作中去。

綜上所述,把項(xiàng)目驅(qū)動(dòng)教學(xué)應(yīng)用于“面向?qū)ο蟪绦蛟O(shè)計(jì)”課程的教學(xué)中,能夠激發(fā)學(xué)生的學(xué)習(xí)興趣,有效地提高學(xué)生學(xué)習(xí)的積極性和主動(dòng)性,改善教學(xué)效果,并有利于學(xué)生的職業(yè)素質(zhì)和能力的培養(yǎng)。

2、項(xiàng)目驅(qū)動(dòng)教學(xué)的應(yīng)用

課程組將項(xiàng)目驅(qū)動(dòng)的教學(xué)模式應(yīng)用于“面向?qū)ο蟪绦蛟O(shè)計(jì)”課程的教學(xué)過(guò)程中,教學(xué)以項(xiàng)目為核心,學(xué)生為主體。教師在教學(xué)中起主導(dǎo)作用,將軟件工程化思想融入到教學(xué)內(nèi)容中,以軟件產(chǎn)品的生產(chǎn)周期作為課程內(nèi)容的主框架,教學(xué)內(nèi)容包括若干個(gè)不同層次的軟件項(xiàng)目,通過(guò)項(xiàng)目引出知識(shí)點(diǎn)。項(xiàng)目驅(qū)動(dòng)教學(xué)模式在課程教學(xué)中的應(yīng)用激發(fā)學(xué)生動(dòng)手實(shí)踐和分析思考,提高了學(xué)生的綜合應(yīng)用能力。

下面從教學(xué)內(nèi)容、教學(xué)方法和手段、教學(xué)組織和教學(xué)評(píng)價(jià)等方面介紹將項(xiàng)目驅(qū)動(dòng)教學(xué)應(yīng)用于“面向?qū)ο蟪绦蛟O(shè)計(jì)”課程改革的具體做法。

2.1 基于項(xiàng)目驅(qū)動(dòng)的教學(xué)內(nèi)容改革

課程組通過(guò)選用國(guó)外原版經(jīng)典教材,引進(jìn)國(guó)外的先進(jìn)教學(xué)理念,依據(jù)課程教學(xué)大綱,以職業(yè)活動(dòng)為導(dǎo)向,以學(xué)生為教學(xué)主體,以項(xiàng)目為中心,對(duì)課程教學(xué)內(nèi)容進(jìn)行整合、序化,構(gòu)建了模塊化課程結(jié)構(gòu),如圖1所示。該結(jié)構(gòu)將課程內(nèi)容劃分為4個(gè)模塊:語(yǔ)言基礎(chǔ)、面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)、面向?qū)ο蟪绦蛟O(shè)計(jì)的方法理論和開(kāi)發(fā)應(yīng)用,并細(xì)化每個(gè)模塊的知識(shí)點(diǎn)和職業(yè)素質(zhì)、技能和能力培養(yǎng)的要求,突出面向?qū)ο蟪绦蛟O(shè)計(jì)的方法理論和開(kāi)發(fā)應(yīng)用,著重培養(yǎng)學(xué)生的職業(yè)素養(yǎng)、主動(dòng)學(xué)習(xí)和創(chuàng)新的能力。

在上述4個(gè)教學(xué)模塊中,教學(xué)內(nèi)容是按項(xiàng)目驅(qū)動(dòng)的。在講授課程內(nèi)容時(shí)直接從面向?qū)ο蟪绦蛟O(shè)計(jì)入手,將語(yǔ)言基礎(chǔ)的知識(shí)分散到其他模塊中進(jìn)行講解。在2、3、4級(jí)模塊中,通過(guò)項(xiàng)目來(lái)詳細(xì)展示每個(gè)單元的重要理論和概念,所涉及的語(yǔ)法知識(shí)會(huì)隨著解決問(wèn)題的需要而引入。基于項(xiàng)目驅(qū)動(dòng)教學(xué)的2、3、4級(jí)模塊所包含的項(xiàng)目如圖2所示。

項(xiàng)目驅(qū)動(dòng)教學(xué)實(shí)施的關(guān)鍵在于項(xiàng)目的設(shè)計(jì)與選取。教學(xué)項(xiàng)目的設(shè)計(jì)與選取遵循有的放矢、與實(shí)際應(yīng)用相關(guān)聯(lián)的原則。同時(shí)項(xiàng)目的難易程度要以不將學(xué)生逼到其“最近發(fā)展區(qū)(Zone ofProximal development)”之外為原則,即選擇的項(xiàng)目要比學(xué)生可以獨(dú)立完成的項(xiàng)目難一些,但是在教師指導(dǎo)下或與其他學(xué)生合作能夠完成。

2.2 基于項(xiàng)目驅(qū)動(dòng)的教學(xué)方法改革

根據(jù)軟件設(shè)計(jì)開(kāi)發(fā)的工程性特點(diǎn),“面向?qū)ο蟪绦蛟O(shè)計(jì)”課程的教學(xué)靈活地運(yùn)用了“基于項(xiàng)目的教學(xué)方法”,突出了“理論教學(xué)構(gòu)筑學(xué)生的知識(shí)結(jié)構(gòu),實(shí)踐教學(xué)構(gòu)筑學(xué)生的職業(yè)技能結(jié)構(gòu)”的教學(xué)原則,并將面向?qū)ο蟪绦蛟O(shè)計(jì)的基本原理、軟件編程的基本規(guī)范和軟件設(shè)計(jì)建模的教學(xué)完全地融合在一起。

項(xiàng)目驅(qū)動(dòng)教學(xué)法與傳統(tǒng)的教學(xué)法相比,有很大的區(qū)別,主要表現(xiàn)在改變了傳統(tǒng)的3個(gè)中心,將以“教師”為中心轉(zhuǎn)變?yōu)橐浴皩W(xué)生”為中心,以“知識(shí)體系”為中心轉(zhuǎn)變?yōu)橐浴绊?xiàng)目”為中心,以“理論講解”為中心轉(zhuǎn)變?yōu)橐浴绊?xiàng)目實(shí)踐”為中心。在教學(xué)過(guò)程中,學(xué)生可以參與軟件產(chǎn)品的構(gòu)思、設(shè)計(jì)、實(shí)施和運(yùn)行,這給學(xué)生創(chuàng)造了感知軟件、動(dòng)手實(shí)踐、分析思考的機(jī)會(huì)。通過(guò)解決問(wèn)題,學(xué)生的學(xué)習(xí)興趣被激發(fā),基本的工程素質(zhì)和能力得到了培養(yǎng)?!盎陧?xiàng)目的教學(xué)方法”目的在于創(chuàng)造條件引導(dǎo)學(xué)生通過(guò)親自參與,自行構(gòu)建知識(shí),而不是簡(jiǎn)單地接受教師的詮釋。

2.3 教學(xué)評(píng)價(jià)和考核方法改革

項(xiàng)目驅(qū)動(dòng)教學(xué)重在知識(shí)的應(yīng)用與集成,因此教學(xué)的考核與評(píng)價(jià)要強(qiáng)調(diào)對(duì)概念的理解,重視對(duì)知識(shí)、技能學(xué)習(xí)過(guò)程的評(píng)價(jià),關(guān)注實(shí)踐環(huán)節(jié)及工程應(yīng)用能力,應(yīng)對(duì)學(xué)生進(jìn)行多視角、多方位的綜合測(cè)評(píng),力求知識(shí)與能力的協(xié)調(diào)統(tǒng)一和考核評(píng)價(jià)的客觀與公正。課程組將考試形式由筆試改為機(jī)試,并增加課程設(shè)計(jì)考核環(huán)節(jié)。學(xué)生最終成績(jī)的評(píng)定方法是:機(jī)試占20%,日常表現(xiàn)(出勤率、作業(yè)與實(shí)驗(yàn)成績(jī))占20%,自我評(píng)價(jià)與同學(xué)生評(píng)價(jià)占10%,項(xiàng)目設(shè)計(jì)和參與程度占20%,答辯情況占20%,撰寫論文或報(bào)告占10%??己诵问降母母飼?huì)引導(dǎo)學(xué)生在課程學(xué)習(xí)中注重編程能力和解決問(wèn)題能力的培養(yǎng)。

3、項(xiàng)目驅(qū)動(dòng)在教學(xué)中的應(yīng)用效果與評(píng)價(jià)

從2009~2010學(xué)年的第一學(xué)期開(kāi)始,課程組將項(xiàng)目驅(qū)動(dòng)應(yīng)用于“面向?qū)ο蟪绦蛟O(shè)計(jì)”的課程教學(xué)中。通過(guò)與傳統(tǒng)教學(xué)進(jìn)行對(duì)比,我們得出以下兩方面的結(jié)論。

3.1 項(xiàng)目驅(qū)動(dòng)對(duì)教學(xué)產(chǎn)生的正面效果

項(xiàng)目驅(qū)動(dòng)教學(xué)增進(jìn)了學(xué)生在概念理解方面的思維能力,增強(qiáng)了學(xué)生分析問(wèn)題、解決問(wèn)題的能力,能夠有效地調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性,提高學(xué)習(xí)的責(zé)任心,改善了學(xué)生與學(xué)生、教師與學(xué)生之間的互動(dòng)關(guān)系,在學(xué)生的團(tuán)隊(duì)合作與溝通能力培養(yǎng)方面起到積極的作用,特別是對(duì)于那些學(xué)習(xí)風(fēng)格不適于傳統(tǒng)課堂授課的學(xué)生的教學(xué)效果特別好。

3.2 項(xiàng)目驅(qū)動(dòng)教學(xué)在應(yīng)用中存在的問(wèn)題

項(xiàng)目驅(qū)動(dòng)教學(xué)并不是一種很容易開(kāi)展的教學(xué)。從教師方面而言,該方法要求教師對(duì)課程知識(shí)的把握程度要深,要有豐富的教學(xué)經(jīng)驗(yàn),能夠根據(jù)教學(xué)情況隨機(jī)應(yīng)變。就學(xué)生方面而言,基于項(xiàng)目的教學(xué)方法要求學(xué)生對(duì)自身的學(xué)習(xí)負(fù)有更多的責(zé)任。在項(xiàng)目實(shí)施過(guò)程中,各種項(xiàng)目管理與人際沖突等問(wèn)題還會(huì)出現(xiàn),這些都是學(xué)生所不習(xí)慣的,同時(shí)也對(duì)教師的教學(xué)組織能力提出了更高的要求。因此,有些教師和學(xué)生在一開(kāi)始會(huì)對(duì)它感到不適應(yīng),在學(xué)習(xí)過(guò)程中也會(huì)出現(xiàn)兩極分化現(xiàn)象。此外,如文獻(xiàn)中所描述的,基于項(xiàng)目的教學(xué)容易產(chǎn)生內(nèi)容知識(shí)方面的空白,忽視和遺漏一些關(guān)鍵知識(shí)點(diǎn),從而影響學(xué)生今后對(duì)一些重要內(nèi)容的進(jìn)一步學(xué)習(xí)。

第7篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

關(guān)鍵詞:C#程序設(shè)計(jì);任務(wù)驅(qū)動(dòng);工作過(guò)程;共享資源;課程開(kāi)發(fā)

1 引言

程序設(shè)計(jì)是一項(xiàng)實(shí)踐性很強(qiáng)的活動(dòng),項(xiàng)目的完成,需要整合各個(gè)知識(shí)點(diǎn),還需要具備綜合應(yīng)用知識(shí)的能力?!禖#程序設(shè)計(jì)》是我校計(jì)算機(jī)應(yīng)用專業(yè)的一門核心課程,2008年立項(xiàng)為院精品課程,2010年立項(xiàng)為浙江省精品課程。本課程幾年來(lái)完成了基于工作過(guò)程的課程開(kāi)發(fā),課程開(kāi)發(fā)遵循了趙志群教授所講的工學(xué)結(jié)合課程的基本原則:學(xué)生通過(guò)對(duì)技術(shù)(或服務(wù))工作的任務(wù)、過(guò)程和環(huán)境進(jìn)行整體化的感悟和反思,實(shí)現(xiàn)知識(shí)與技能、過(guò)程與方法、情感態(tài)度與價(jià)值觀學(xué)習(xí)的統(tǒng)一。課程從提出一個(gè)具體的應(yīng)用項(xiàng)目的需求開(kāi)始,到最終完成項(xiàng)目開(kāi)發(fā)交給用戶為止,通過(guò)若干相對(duì)獨(dú)立而又逐步發(fā)展的任務(wù)組織知識(shí)點(diǎn),每一個(gè)任務(wù)都是先提出要解決的問(wèn)題,然后明確目標(biāo)和解決問(wèn)題的步驟,在.NET Framework基礎(chǔ)上,運(yùn)用Visual C#進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì),充分利用面向?qū)ο蟮姆庋b性、繼承性和多態(tài)性等特性實(shí)現(xiàn)項(xiàng)目,步步為營(yíng),逐步發(fā)展,給學(xué)生持續(xù)的動(dòng)力、興趣和成就感。課程開(kāi)發(fā)側(cè)重工學(xué)結(jié)合,知識(shí)和能力的統(tǒng)一。

2 課程開(kāi)發(fā)的主要步驟

2.1 尋找一系列具有典型意義的綜合性的工作任務(wù)

以就業(yè)為導(dǎo)向是課程體系設(shè)置核心的特征。職業(yè)教育的本質(zhì)就是就業(yè)教育,學(xué)習(xí)的目標(biāo)就是為了就業(yè),有助于就業(yè)的我們就學(xué)、并且學(xué)精,無(wú)助于就業(yè)的我們就不學(xué)。為了能夠滿足就業(yè)的需求,我們做的第一件事情就是去軟件開(kāi)發(fā)企業(yè)了解用人狀況和技術(shù)需求,通過(guò)對(duì)掌握的一手?jǐn)?shù)據(jù)進(jìn)行詳細(xì)分析和多次專家研討,比較全面地掌握企業(yè)用人需求。尋找一系列具有典型意義的綜合性的工作任務(wù)。

整體化的工作分析的結(jié)果不是獨(dú)立的、點(diǎn)狀的“能力點(diǎn)”或者“技能點(diǎn)”,而是過(guò)程完整的“典型工作任務(wù)”。

2.2 在典型工作任務(wù)的基礎(chǔ)上設(shè)計(jì)學(xué)習(xí)領(lǐng)域課程及其學(xué)習(xí)任務(wù)

學(xué)習(xí)情境的載體是一個(gè)“學(xué)習(xí)與工作任務(wù)”,即“內(nèi)容是工作的學(xué)習(xí)任務(wù)”,“用于學(xué)習(xí)的工作任務(wù)”,簡(jiǎn)稱“學(xué)習(xí)任務(wù)”或“學(xué)習(xí)性任務(wù)”。

學(xué)習(xí)任務(wù)是學(xué)習(xí)情境的物質(zhì)化表現(xiàn),它來(lái)源于企業(yè)生產(chǎn)或服務(wù)實(shí)踐,能夠建立起學(xué)習(xí)和工作的直接聯(lián)系,但并不一定是企業(yè)真實(shí)工作任務(wù)的忠實(shí)再現(xiàn)。

軟件開(kāi)發(fā)領(lǐng)域內(nèi)所涉及到的技術(shù)內(nèi)容是非常多的,不同的行業(yè)會(huì)使用不同的技術(shù),不同的項(xiàng)目也會(huì)使用不同的技術(shù),在技術(shù)選擇上我們遵循實(shí)用原則:所選擇的技術(shù)一定是能夠解決實(shí)際工作中的實(shí)際問(wèn)題的技術(shù)。課程主要內(nèi)容集中在如何解決軟件開(kāi)發(fā)項(xiàng)目中所涉及到的技術(shù)工具、技術(shù)框架、開(kāi)發(fā)流程和編碼調(diào)試經(jīng)驗(yàn)等方面?!安灰ケ痴b對(duì)象有哪些方法、屬性,而是要去使用這個(gè)對(duì)象去解決實(shí)際問(wèn)題”。

課程內(nèi)容的安排要以學(xué)習(xí)任務(wù)為中心來(lái)開(kāi)展,并適當(dāng)?shù)匕讯鄠€(gè)學(xué)習(xí)任務(wù)聯(lián)結(jié)成一個(gè)工程項(xiàng)目。在每一個(gè)學(xué)習(xí)領(lǐng)域課程中,都采用一個(gè)實(shí)際的開(kāi)發(fā)項(xiàng)目來(lái)組織技術(shù)內(nèi)容,課上老師會(huì)通過(guò)項(xiàng)目的講解來(lái)引出技術(shù)內(nèi)容,而上機(jī)課要求同學(xué)自己逐步完成一個(gè)類似的項(xiàng)目。

在項(xiàng)目的選擇上,在考慮到項(xiàng)目的實(shí)用性的同時(shí),也盡可能地提高項(xiàng)目的趣味性、并加強(qiáng)與日常生活中遇到的問(wèn)題和現(xiàn)象的 聯(lián)系,從而幫助同學(xué)理解項(xiàng)目?jī)?nèi)容。

2.3 課程學(xué)習(xí)任務(wù)舉例

課程體系中典型工作任務(wù)之一:開(kāi)發(fā)三層結(jié)構(gòu)數(shù)據(jù)庫(kù)應(yīng)用程序。

學(xué)習(xí)任務(wù)1:用三層結(jié)構(gòu)實(shí)現(xiàn)不同類型用戶登錄考試管理系統(tǒng)(應(yīng)用面向?qū)ο髮?shí)現(xiàn)三層結(jié)構(gòu)數(shù)據(jù)庫(kù)應(yīng)用程序的開(kāi)發(fā))。

子任務(wù)1:完成管理員窗體的登錄。

子任務(wù)2:完成學(xué)員窗體的登錄。

首先教師指導(dǎo)學(xué)生實(shí)現(xiàn)管理員窗體的登錄過(guò)程,項(xiàng)目在三層結(jié)構(gòu)的基礎(chǔ)上具體實(shí)現(xiàn)步驟如下:

(1)實(shí)現(xiàn)業(yè)務(wù)實(shí)體層。包括新增實(shí)體層項(xiàng)目、添加其它項(xiàng)目對(duì)實(shí)體項(xiàng)目的引用、添加數(shù)據(jù)表對(duì)應(yīng)的實(shí)體類、編寫實(shí)體類。(2)設(shè)計(jì)用戶界面。(3)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層。(4)實(shí)現(xiàn)業(yè)務(wù)邏輯層。(5)實(shí)現(xiàn)表示層數(shù)據(jù)綁定。

關(guān)鍵技術(shù):使用實(shí)體類消除關(guān)系數(shù)據(jù)與類之間的差別,通過(guò)將關(guān)系數(shù)據(jù)封裝成實(shí)體對(duì)象,用實(shí)體對(duì)象實(shí)現(xiàn)三層結(jié)構(gòu)中數(shù)據(jù)傳遞的載體。見(jiàn)圖1。

運(yùn)行完成的應(yīng)用系統(tǒng),首先進(jìn)入系統(tǒng)登錄窗體。見(jiàn)圖2。

學(xué)生在數(shù)據(jù)庫(kù)管理員表中找到存在的用戶名及密碼并輸入登錄窗體,選擇用戶類別為管理員,進(jìn)入管理員窗體界面。至此完成管理員窗體的登錄,學(xué)生已有了小小的成就感,接下來(lái)讓學(xué)生獨(dú)立完成子任務(wù)2:完成學(xué)員窗體的登錄,同時(shí)培養(yǎng)了學(xué)生對(duì)知識(shí)的再學(xué)習(xí)能力。

學(xué)習(xí)任務(wù)2:用實(shí)體類實(shí)現(xiàn)教員賬戶創(chuàng)建、實(shí)現(xiàn)教員信息預(yù)覽、編輯。

子任務(wù)1:用實(shí)體類實(shí)現(xiàn)教員賬戶創(chuàng)建。

子任務(wù)2:用實(shí)體類實(shí)現(xiàn)教員信息預(yù)覽。

子任務(wù)3:用實(shí)體類實(shí)現(xiàn)教員信息編輯。

2.4 基于“共享型教學(xué)資源”的教學(xué)模式

創(chuàng)建基于共享型教學(xué)資源平臺(tái),建成以“共享型教學(xué)資源庫(kù)”為核心,以“開(kāi)放型教學(xué)平臺(tái)”為載體,具有行業(yè)企業(yè)參與、滿足廣大師生自我學(xué)習(xí)和自我提高、滿足服務(wù)地方經(jīng)濟(jì)需要為一體的具有高可用性、開(kāi)放性、共享性、伸縮性和可靠性的教學(xué)資源共享、管理和服務(wù)平臺(tái)。

基于“共享型教學(xué)資源”的高職教學(xué)平臺(tái)能使高職院校和企業(yè)間的需求信息及時(shí)、順利地對(duì)接,使學(xué)校能充分尊重學(xué)生職業(yè)生涯的發(fā)展需求,充分調(diào)動(dòng)學(xué)生學(xué)習(xí)技術(shù)業(yè)務(wù)的自覺(jué)性,大力營(yíng)造崗位成才的環(huán)境和氛圍,使學(xué)生盡快適應(yīng)企業(yè)的環(huán)境,實(shí)現(xiàn)向“社會(huì)人”和“職業(yè)人”的轉(zhuǎn)變。做到學(xué)校出人才、企業(yè)用人才、學(xué)生實(shí)現(xiàn)崗位成才。

基于“共享型教學(xué)資源”的高職教學(xué)平臺(tái)強(qiáng)調(diào)在線學(xué)習(xí),重視發(fā)揮學(xué)生的主體作用,指導(dǎo)學(xué)生利用教學(xué)平臺(tái)自主探究,引導(dǎo)學(xué)生進(jìn)行發(fā)現(xiàn)學(xué)習(xí)。

教師利用平臺(tái)整合教學(xué)資源,提出學(xué)習(xí)任務(wù),引導(dǎo)學(xué)生學(xué)習(xí)新知識(shí)。運(yùn)用自主學(xué)習(xí)與協(xié)作學(xué)習(xí)相結(jié)合的方式進(jìn)行探究式學(xué)習(xí),對(duì)任務(wù)進(jìn)行交流與討論,通過(guò)協(xié)作完成并在線提交任務(wù)。教師和企業(yè)專家給出任務(wù)評(píng)價(jià)標(biāo)準(zhǔn),并做為課程考核的重要評(píng)價(jià)指標(biāo)之一。

3 總結(jié)

浙江省教育廳廳長(zhǎng)劉希平說(shuō):“我們應(yīng)該高度重視課程開(kāi)發(fā),尤其是二次開(kāi)發(fā)。我們應(yīng)該鼓勵(lì)和要求教師在教學(xué)過(guò)程中進(jìn)行二次開(kāi)發(fā),即對(duì)已有的課程,教師應(yīng)根據(jù)自己的理解、研究,針對(duì)學(xué)生的實(shí)際,進(jìn)行一些教學(xué)創(chuàng)新。教師只有對(duì)教材有獨(dú)特的理解、系統(tǒng)的分析,才能夠把課教得生動(dòng),教得有針對(duì)性?!?/p>

本門課程的教學(xué)團(tuán)隊(duì)經(jīng)過(guò)幾年的教學(xué)實(shí)踐,針對(duì)學(xué)生的實(shí)際,對(duì)課程進(jìn)行了二次開(kāi)發(fā),將一個(gè)大的項(xiàng)目分解成幾個(gè)小的學(xué)習(xí)任務(wù),再分解成幾個(gè)子任務(wù),明確提出任務(wù)的需求和目標(biāo),給學(xué)生持續(xù)的動(dòng)力、興趣和成就感。

在項(xiàng)目實(shí)施過(guò)程中,根據(jù)需要進(jìn)行分組,以組為單位完成任務(wù),學(xué)生的收獲既有交流中的炫耀引發(fā)的自豪感,又有互通有無(wú)、相互學(xué)習(xí)、相互補(bǔ)充中對(duì)知識(shí)的逐步完善。通過(guò)項(xiàng)目教學(xué)能夠更好地促進(jìn)學(xué)生實(shí)踐能力和綜合素質(zhì)的提高。

在今后的教學(xué)中要繼續(xù)完善《基于共享型教學(xué)平臺(tái)》的建設(shè),使學(xué)生通過(guò)這個(gè)平臺(tái)能更好地了解企業(yè)需求,并學(xué)會(huì)自主學(xué)習(xí),能完成平臺(tái)提出的相應(yīng)任務(wù)需求,為社會(huì)、企業(yè)不斷創(chuàng)造價(jià)值,真正實(shí)現(xiàn)崗位成才。

參考文獻(xiàn)

[1]北京阿博泰克北大青鳥信息技術(shù)有限公司.在.NET框架下開(kāi)發(fā)三層結(jié)構(gòu)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)[M].北京:科學(xué)技術(shù)文獻(xiàn)出版社,2008.

第8篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

[關(guān)鍵詞]項(xiàng)目驅(qū)動(dòng) 實(shí)踐應(yīng)用 教學(xué)改革

[作者簡(jiǎn)介]湯海蓉(1974-),女,湖南常德人,湖南文理學(xué)院計(jì)算機(jī)學(xué)院,講師,碩士,主要研究方向?yàn)閿?shù)據(jù)庫(kù)、計(jì)算機(jī)教育。(湖南 常德 415000)李錫輝(1974-),女,湖南望城人,湖南信息職業(yè)技術(shù)學(xué)院,副教授,碩士,主要研究方向?yàn)閃EB應(yīng)用開(kāi)發(fā),視頻圖像處理。(湖南 長(zhǎng)沙 410200)

[中圖分類號(hào)]G642 [文獻(xiàn)標(biāo)識(shí)碼]A [文章編號(hào)]1004-3985(2012)06-0140-03

在互聯(lián)網(wǎng)時(shí)代,JAVA語(yǔ)言已經(jīng)是使用最廣泛的編程語(yǔ)言之一。由于免費(fèi)、跨平臺(tái)、語(yǔ)言本身技術(shù)先進(jìn),它已經(jīng)成為許多學(xué)科研究、課程和計(jì)算的首選語(yǔ)言。有關(guān)資料顯示,IT人才屬國(guó)內(nèi)人才緊缺指數(shù)較高的一類,優(yōu)秀的JAVA編程人員更是尤其缺乏。隨著3G、物聯(lián)網(wǎng)時(shí)代的到來(lái),JAVA語(yǔ)言不僅不會(huì)“過(guò)時(shí)”,相反,它將會(huì)在新的業(yè)務(wù)領(lǐng)域有著更輝煌的發(fā)展前景。正因如此,目前各類高校均將JAVA作為計(jì)算機(jī)專業(yè)的主要教學(xué)語(yǔ)言之一,通過(guò)學(xué)習(xí),學(xué)生可以獲得一定的編程能力,鍛煉自己的邏輯思維,為將來(lái)的就業(yè)打好基礎(chǔ)。

一、JAVA語(yǔ)言目前教學(xué)中存在的問(wèn)題

傳統(tǒng)實(shí)踐教學(xué)中,由于受諸多因素的影響,教學(xué)效果不甚理想。具體表現(xiàn)在:

1 教學(xué)手法單一。傳統(tǒng)的教學(xué)是以教師、教材為中心。教師負(fù)責(zé)教,學(xué)生負(fù)責(zé)學(xué),教材怎么寫,教師就怎么講,學(xué)生就怎么學(xué)。一般方法是教師根據(jù)大綱和教材,針對(duì)某個(gè)知識(shí)點(diǎn)進(jìn)行重點(diǎn)講授,列舉若干驗(yàn)證性的實(shí)驗(yàn)加以佐證,學(xué)生亦通過(guò)上機(jī)編寫一些小的算法,對(duì)課堂上的某一到兩個(gè)知識(shí)點(diǎn)加以理解和吸收。一定程度上忽視了學(xué)生作為學(xué)習(xí)主體的存在,忽視了JA―VA語(yǔ)言具有極強(qiáng)實(shí)踐性的特征,使學(xué)生喪失了學(xué)習(xí)的積極性、自主性和創(chuàng)造性。

2 學(xué)生對(duì)課程的難度認(rèn)識(shí)不夠。源于JAVA在行業(yè)中的廣泛應(yīng)用,許多學(xué)生初次接觸JAVA,對(duì)學(xué)成之后的前景是非常期待的,因而興趣十分濃厚,又由于有C及C++語(yǔ)言的基礎(chǔ),會(huì)認(rèn)為不過(guò)是C++的向上封裝。但隨著學(xué)習(xí)的深入,面對(duì)大量不斷涌現(xiàn)的各類環(huán)境配置、OOP思想、類庫(kù)、乃至設(shè)計(jì)模式、架構(gòu)等,繁多而枯燥,在沒(méi)有實(shí)際成果激勵(lì)的情況下,無(wú)法達(dá)到原來(lái)的預(yù)期,就會(huì)產(chǎn)生畏難心理,進(jìn)而影響后續(xù)的學(xué)習(xí)。

3 實(shí)踐能力差。傳統(tǒng)教學(xué)模式下培養(yǎng)出的學(xué)生,被動(dòng)接受知識(shí),理論掌握得較好,也能在實(shí)驗(yàn)中實(shí)現(xiàn)一些孤立算法,各個(gè)知識(shí)點(diǎn)之間沒(méi)有建立相關(guān)串聯(lián),一旦被要求完成一個(gè)實(shí)際的完整項(xiàng)目時(shí),則會(huì)茫然得不知從何下手。更不用說(shuō)運(yùn)用軟件工程的思想進(jìn)行開(kāi)發(fā)和團(tuán)隊(duì)合作了。

4 考核標(biāo)準(zhǔn)單一。傳統(tǒng)教學(xué)對(duì)學(xué)生的考核是通過(guò)筆試完成的,掌握了教師所交給的課本知識(shí),通過(guò)記憶,考試就能夠取得好成績(jī),學(xué)校對(duì)教師的評(píng)價(jià)也基本上是看教學(xué)成績(jī),使部分學(xué)生產(chǎn)生了只要背背知識(shí)點(diǎn)通過(guò)考試就行、實(shí)踐無(wú)所謂的錯(cuò)誤傾向。這種重結(jié)果而不重過(guò)程。重考試成績(jī)而不重全面發(fā)展的考核方式,不能充分地發(fā)揮出考核作為指導(dǎo)教學(xué)、檢驗(yàn)學(xué)生學(xué)習(xí)能力的指揮棒作用。

以上諸多問(wèn)題究其根源是學(xué)生學(xué)習(xí)動(dòng)力的缺乏,解決的辦法就在于激發(fā)其學(xué)習(xí)興趣和信心,最好的途徑就是能夠讓學(xué)生自己動(dòng)手解決實(shí)際問(wèn)題,讓其能力得到肯定和承認(rèn),讓其體會(huì)到成功的快樂(lè),從而增強(qiáng)學(xué)習(xí)動(dòng)力。針對(duì)于此,有必要對(duì)傳統(tǒng)的課程教學(xué)模式進(jìn)行改革,經(jīng)過(guò)不斷實(shí)踐,筆者在教學(xué)中總結(jié)了一套行之有效的基于項(xiàng)目驅(qū)動(dòng)的教學(xué)方法。

二、基于項(xiàng)目驅(qū)動(dòng)的教學(xué)法

基于項(xiàng)目驅(qū)動(dòng)的教學(xué)法是指根據(jù)大綱所規(guī)定的教學(xué)內(nèi)容、教學(xué)目的和教學(xué)要求,將一個(gè)實(shí)際管理活動(dòng)中與課程相關(guān)的內(nèi)容,加以收集、歸納、整理,形成項(xiàng)目任務(wù)。依托這些資料,教師通過(guò)巧妙設(shè)計(jì)教學(xué)內(nèi)容,深入淺出地講解知識(shí)點(diǎn),形象地指導(dǎo)學(xué)生實(shí)施理論聯(lián)系實(shí)際,讓學(xué)生通過(guò)完成項(xiàng)目來(lái)達(dá)到掌握知識(shí)的目的。學(xué)生在強(qiáng)烈的問(wèn)題動(dòng)機(jī)驅(qū)動(dòng)下,通過(guò)對(duì)教學(xué)資源的主動(dòng)應(yīng)用,進(jìn)行自主探索和互動(dòng)協(xié)作,根據(jù)項(xiàng)目要求進(jìn)行需求分析、數(shù)據(jù)庫(kù)設(shè)計(jì)、代碼編寫以及測(cè)試,針對(duì)項(xiàng)目中各種實(shí)際問(wèn)題,獨(dú)立思考,協(xié)同探索,研究解決問(wèn)題的方法,通過(guò)實(shí)踐實(shí)現(xiàn)目標(biāo),提高概括分析問(wèn)題、解決實(shí)際問(wèn)題以及編程的能力。

基于項(xiàng)目驅(qū)動(dòng)的教學(xué)目的是以學(xué)生為中心,但不是要求學(xué)生只會(huì)解釋問(wèn)題,而是要培養(yǎng)學(xué)生具有解決實(shí)際問(wèn)題的能力,解決“干什么”“怎么干”的問(wèn)題。強(qiáng)調(diào)以直接經(jīng)驗(yàn)的形式來(lái)掌握融合在各實(shí)踐活動(dòng)中的最新知識(shí)、技能和技巧。在項(xiàng)目教學(xué)中,學(xué)生不但學(xué)習(xí)了新知識(shí),更學(xué)會(huì)了探究解決問(wèn)題的一般研究規(guī)律和方法,這為學(xué)生分析新的項(xiàng)目,達(dá)到舉一反三的目標(biāo),打下了良好的專業(yè)基礎(chǔ),讓其能在將來(lái)的工作中,很快進(jìn)入角色。

三、具體操作

經(jīng)過(guò)實(shí)踐總結(jié),筆者將項(xiàng)目驅(qū)動(dòng)教學(xué)的過(guò)程劃分成以下幾個(gè)步驟,具體如圖1所示:

1 確定項(xiàng)目。課程學(xué)習(xí)開(kāi)始之初,先選取一個(gè)與學(xué)生聯(lián)系較為緊密的實(shí)際項(xiàng)目,比如學(xué)生管理系統(tǒng)、網(wǎng)上商城等。項(xiàng)目的選擇要求如下:(1)具有典型性、符合實(shí)際;(2)項(xiàng)目設(shè)計(jì)的問(wèn)題具有啟發(fā)性,符合教學(xué)的要求;(3)符合教學(xué)目標(biāo)的需要;(4)內(nèi)容的深淺應(yīng)符合學(xué)生學(xué)習(xí)的需求;(5)項(xiàng)目的設(shè)計(jì)應(yīng)體現(xiàn)知識(shí)的系統(tǒng)性和整合性。以學(xué)生管理系統(tǒng)為例,首先將教師在以往工作中編寫的系統(tǒng)運(yùn)行展示給學(xué)生,讓其大致了解將來(lái)要求設(shè)計(jì)完成的效果,激起學(xué)生的興趣,然后有的放矢地設(shè)計(jì)自己的目標(biāo)項(xiàng)目。

2 任務(wù)劃分及小組分工。根據(jù)軟件工程的思想,以項(xiàng)目功能模塊為單位進(jìn)行小組劃分,并選定小組負(fù)責(zé)人,培養(yǎng)團(tuán)隊(duì)精神。具體劃分見(jiàn)圖2。在項(xiàng)目的需求分析階段,小組成員可以通過(guò)集體討論,集思廣益,給出設(shè)計(jì)方案;在設(shè)計(jì)過(guò)程中,由組長(zhǎng)安排各成員的分工協(xié)作,確定每人所承擔(dān)的任務(wù)。成員可以輪流承擔(dān)各階段的設(shè)計(jì)、編碼和測(cè)試任務(wù),使學(xué)生在過(guò)程中扮演不同的角色,培養(yǎng)各方面的能力,加強(qiáng)與他人的溝通;要求每個(gè)小組既要實(shí)現(xiàn)獨(dú)立的子系統(tǒng)的功能,又應(yīng)當(dāng)與其他小組建立聯(lián)系,最后要求整合以共同完成整個(gè)項(xiàng)目。

3 教學(xué)安排。在教學(xué)過(guò)程中,教師要對(duì)教材上的知識(shí)點(diǎn)進(jìn)行重新組織和安排。不是不加選擇地從頭講到尾,而是根據(jù)知識(shí)點(diǎn)的難易程度、實(shí)用性以及與實(shí)踐項(xiàng)目的關(guān)系密切程度,有選擇地進(jìn)行講解。由于前期已有相關(guān)課程的學(xué)習(xí)基礎(chǔ),比如在C++課程中已經(jīng)學(xué)習(xí)了OOP的思想及相關(guān)語(yǔ)法知識(shí),只需對(duì)其差異部分稍加講解;數(shù)據(jù)庫(kù)相關(guān)知識(shí)的掌握,使得學(xué)生可以較早著手分析和數(shù)據(jù)庫(kù)相關(guān)的內(nèi)容,進(jìn)行概念結(jié)構(gòu)設(shè)計(jì)和邏輯結(jié)構(gòu)設(shè)計(jì)。另外,針對(duì)教材一般只定位于J2SE中的一部分基礎(chǔ)知識(shí),根據(jù)項(xiàng)目實(shí)踐需要以及學(xué)生的能力水平,還需將一部分高級(jí)和擴(kuò)展部分內(nèi)容穿插到課堂和實(shí)踐中,如網(wǎng)絡(luò)編程、系統(tǒng)的邏輯架構(gòu)及物理架構(gòu)的設(shè)計(jì)等,以幫助學(xué)生提高項(xiàng)目實(shí)踐能力。部分教學(xué)安排見(jiàn)下表:

4 過(guò)程指導(dǎo)。在項(xiàng)目進(jìn)行過(guò)程中,主要依靠學(xué)生自身的能力和團(tuán)隊(duì)的協(xié)作,通過(guò)查閱資料及網(wǎng)絡(luò)自主學(xué)習(xí),以團(tuán)隊(duì)為單位

獨(dú)立解決遇到的困難;教師亦必須全程指導(dǎo)、策劃,協(xié)調(diào)各個(gè)子項(xiàng)目之間的協(xié)同進(jìn)展,通過(guò)多種教學(xué)手段答疑解惑,如推薦網(wǎng)絡(luò)版教程、Email答疑、QQ群集體討論、定期當(dāng)面探討等,對(duì)設(shè)計(jì)過(guò)程中可能遇到的較深入的知識(shí)點(diǎn)進(jìn)行有效學(xué)習(xí)指導(dǎo),在項(xiàng)目的一些關(guān)鍵階段進(jìn)行適當(dāng)?shù)狞c(diǎn)評(píng),并對(duì)設(shè)計(jì)過(guò)程中出現(xiàn)的偏差及時(shí)糾正,鼓勵(lì)學(xué)生獨(dú)立思考和團(tuán)隊(duì)協(xié)作,引導(dǎo)學(xué)生變注重知識(shí)為注重能力,使他們完善設(shè)計(jì),促進(jìn)自身的不斷提高。

5 綜合評(píng)估。學(xué)期結(jié)束,需要對(duì)完成的較完整的項(xiàng)目進(jìn)行檢查與評(píng)價(jià)。首先應(yīng)由學(xué)生對(duì)自己的工作進(jìn)行評(píng)定,闡述包括在項(xiàng)目準(zhǔn)備、具體設(shè)計(jì)、測(cè)試過(guò)程中碰到的各種疑難問(wèn)題、解決的手法以及結(jié)果如何,總結(jié)團(tuán)隊(duì)合作的感受,并對(duì)本組負(fù)責(zé)的模塊的運(yùn)行效果加以點(diǎn)評(píng)。教師最后進(jìn)行工作總結(jié),總結(jié)團(tuán)隊(duì)中各成員在設(shè)計(jì)過(guò)程中的分工和職能的完成情況,依據(jù)各組負(fù)責(zé)模塊的難易程度、總體完成情況、個(gè)人對(duì)團(tuán)隊(duì)的貢獻(xiàn)等因素進(jìn)行綜合評(píng)判,給出學(xué)生的實(shí)踐能力成績(jī),找出差距與改正方法,并最終納入到課程考核成績(jī)中。最后,還應(yīng)指導(dǎo)學(xué)生分組撰寫實(shí)踐報(bào)告。

6 教學(xué)效果分析?;陧?xiàng)目的教學(xué)實(shí)施之后,與上一學(xué)年的學(xué)長(zhǎng)相比,本學(xué)年的學(xué)生的學(xué)習(xí)積極性明顯提高,學(xué)生不僅積極完成課堂上的任務(wù),同時(shí)也開(kāi)始自主學(xué)習(xí),積極組織及參與各種形式的討論,課后提問(wèn)明顯增多,學(xué)習(xí)氣氛濃厚。同時(shí)。學(xué)生開(kāi)發(fā)編寫的代碼數(shù)量和質(zhì)量有了質(zhì)的提升,并對(duì)于一些較為深入的內(nèi)容也有所主動(dòng)涉及,如設(shè)計(jì)模式等,真正實(shí)現(xiàn)了“學(xué)為所用”和“學(xué)以致用”。此外,在設(shè)計(jì)過(guò)程中還培養(yǎng)了團(tuán)隊(duì)協(xié)作精神和集體榮譽(yù)感,鍛煉了溝通能力和合作意識(shí)。而對(duì)于設(shè)計(jì)過(guò)程中不斷出現(xiàn)的新問(wèn)題和新思路,也促使教師加深思考,根據(jù)不同學(xué)生的不同理解補(bǔ)充新的教學(xué)內(nèi)容,教學(xué)相長(zhǎng)。

四、項(xiàng)目教學(xué)中應(yīng)注意的問(wèn)題

1 正確處理項(xiàng)目教學(xué)與傳統(tǒng)課堂講授教學(xué)的關(guān)系。項(xiàng)目教學(xué)并不能完全取代傳統(tǒng)課堂講授,教師對(duì)一門學(xué)科的重點(diǎn)和難點(diǎn)進(jìn)行適當(dāng)講授,是教學(xué)中不能缺少的。另一方面,課堂講授應(yīng)當(dāng)是誘導(dǎo)式的、啟發(fā)式的,應(yīng)與項(xiàng)目教學(xué)結(jié)合起來(lái),只有把兩者有機(jī)地結(jié)合起來(lái)才能取得更好的效果。因此,項(xiàng)目教學(xué)的優(yōu)勢(shì)是明顯的,但也不是完美無(wú)缺的,我們應(yīng)在教學(xué)中充分發(fā)揮項(xiàng)目教學(xué)與傳統(tǒng)講授各自的優(yōu)勢(shì),取長(zhǎng)補(bǔ)短,培養(yǎng)適應(yīng)社會(huì)發(fā)展的實(shí)用型人才。

2 正確處理項(xiàng)目教學(xué)與其他教學(xué)手段的關(guān)系。在教學(xué)過(guò)程中,除了項(xiàng)目教學(xué)、傳統(tǒng)講授教學(xué)以外,還有許多其他教學(xué)手段,例如模擬實(shí)驗(yàn)等手段,對(duì)于學(xué)生各方面知識(shí)與技能的培養(yǎng)都是非常有利的。因此,在教學(xué)過(guò)程中,我們不能囿于項(xiàng)目教學(xué)與傳統(tǒng)講授兩種方法,應(yīng)該根據(jù)課程內(nèi)容的不同特點(diǎn)。選擇不同的教學(xué)方法,以此激發(fā)學(xué)生的學(xué)習(xí)熱情。

3 項(xiàng)目教學(xué)對(duì)教師和學(xué)生都提出了更新、更多的要求。教師必須具備完成一個(gè)項(xiàng)目所需的全部理論知識(shí)和專業(yè)技能,尋找到一個(gè)能覆蓋學(xué)生學(xué)習(xí)領(lǐng)域所涉及的全部或絕大多數(shù)內(nèi)容的合適項(xiàng)目,必須充分收集、熟悉、掌握相關(guān)資料。并從中歸納要點(diǎn),提供分析、討論的框架,必須做大量的準(zhǔn)備工作以應(yīng)對(duì)學(xué)生可能提出的各種問(wèn)題,還要求教師具有很強(qiáng)的調(diào)控能力。從學(xué)生方面來(lái)看,再不能像以前那樣被動(dòng)地接受“滿堂灌”,而必須充分發(fā)揮自己的主動(dòng)性,查閱大量參考資料。提前預(yù)習(xí),發(fā)現(xiàn)問(wèn)題,與他人合作,開(kāi)展調(diào)查研究,提出解決問(wèn)題的對(duì)策,運(yùn)用適當(dāng)?shù)姆椒ê褪侄危磉_(dá)、交流、反思自己學(xué)習(xí)和設(shè)計(jì)的見(jiàn)解及成果。

第9篇:驅(qū)動(dòng)程序設(shè)計(jì)范文

關(guān)鍵詞:嵌入式系統(tǒng);linux;驅(qū)動(dòng)程序

引言

Linux是一個(gè)遵循POSIX標(biāo)準(zhǔn)的免費(fèi)操作系統(tǒng)。具有BSD和SYSV的擴(kuò)展特性。與其他操作系統(tǒng)相比,嵌入式Linux系統(tǒng)以其可應(yīng)用于多種硬件平臺(tái)、內(nèi)核高效穩(wěn)定、源碼開(kāi)放、軟件豐富、網(wǎng)絡(luò)通信和文件管理機(jī)制完善等優(yōu)良特性而正被作為研究熱點(diǎn),越來(lái)越多的研究人員采用Linux平臺(tái)來(lái)開(kāi)發(fā)自己的產(chǎn)品。Linux設(shè)備驅(qū)動(dòng)程序在Linux內(nèi)核源代碼中占有很大比例,從2.0、2.2到2.4版本的內(nèi)核,源代碼的長(zhǎng)度日益增加,其實(shí)主要是設(shè)備驅(qū)動(dòng)程序在增加。

設(shè)備驅(qū)動(dòng)程序的編寫

設(shè)備驅(qū)動(dòng)程序是linux內(nèi)核的一部分,是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口,它由一組函數(shù)和一些私有數(shù)據(jù)組成,是連接應(yīng)用程序與具體硬件的橋梁。Linux的一個(gè)基本特點(diǎn)是它對(duì)硬件設(shè)備的管理抽象化,系統(tǒng)中的每一個(gè)設(shè)備都用一個(gè)特殊的文件來(lái)表示。所有的硬件設(shè)備都像普通的文件一樣看待,使用與操作系統(tǒng)相同的標(biāo)準(zhǔn)系統(tǒng)來(lái)進(jìn)行打開(kāi)、讀寫和關(guān)閉。

在Linux操作系統(tǒng)下有3類主要的設(shè)備文件類型:塊設(shè)備、字符設(shè)備、網(wǎng)絡(luò)設(shè)備。字符設(shè)備是指存取時(shí)沒(méi)有緩存的設(shè)備。可像文件一樣訪問(wèn)字符設(shè)備,字符設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)實(shí)現(xiàn)這些行為。系統(tǒng)的控制臺(tái)和并口就是字符設(shè)備的例子,它們可以很好地用“流”來(lái)描述。塊設(shè)備是文件系統(tǒng)的宿主,如磁盤。Linux允許像字符設(shè)備那樣讀取塊設(shè)備――允許一次傳輸任意數(shù)目的字節(jié)。結(jié)果是,字符設(shè)備和塊設(shè)備讀取數(shù)方式一致。而網(wǎng)絡(luò)設(shè)備不同于字符設(shè)備和塊設(shè)備,它面向的上一層不是文件系統(tǒng)而是網(wǎng)絡(luò)協(xié)議層,是通過(guò)BSD套接口訪問(wèn)數(shù)據(jù)。與設(shè)備相對(duì)應(yīng)的是三類設(shè)備驅(qū)動(dòng)程序,字符設(shè)備驅(qū)動(dòng)程序、塊設(shè)備驅(qū)動(dòng)程序、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序。

字符設(shè)備驅(qū)動(dòng)程序、塊設(shè)備驅(qū)動(dòng)程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)體是不同的。

在linux源代碼linux/include/linux/fs.h中定義了字符設(shè)備和塊設(shè)備驅(qū)動(dòng)程序中必須使用的file_operations結(jié)構(gòu),每個(gè)設(shè)備驅(qū)動(dòng)都實(shí)現(xiàn)這個(gè)接口所定義的部分或全部函數(shù)。隨著內(nèi)核的不斷升級(jí),file_operations結(jié)構(gòu)也越來(lái)越大,不同的版本的內(nèi)核會(huì)稍有不同。

應(yīng)用程序只有通過(guò)對(duì)設(shè)備文件的open、release、read、write、ioctl等才能訪問(wèn)字符設(shè)備和塊設(shè)備。用戶自己定義好file_operations結(jié)構(gòu)后,編寫出設(shè)備實(shí)際所需要的各操作函數(shù),對(duì)于不需要的操作函數(shù)用NULL初始化,這些操作函數(shù)將被注冊(cè)到內(nèi)核,當(dāng)應(yīng)用程序?qū)υO(shè)備相應(yīng)的設(shè)備文件進(jìn)行文件操作時(shí),內(nèi)核會(huì)找到相應(yīng)的操作函數(shù),并進(jìn)行調(diào)用。如果操作函數(shù)使用NULL,操作函數(shù)就進(jìn)行默認(rèn)處理。

對(duì)于字符設(shè)備而言,llseek(),read(),write(),ioctl(),open(),release()這些函數(shù)是不可缺的;對(duì)十塊設(shè)備,open(),release(),ioctl(),check_media_change(),revalidate()是不可缺少的。

網(wǎng)絡(luò)設(shè)備結(jié)構(gòu)體net_device定義在include\linuxhletdevice.h里,如下所示:

定義好net_device結(jié)構(gòu)體后,根據(jù)實(shí)際情況編寫操作函數(shù),其中hard_start_xmit()函數(shù)是用來(lái)發(fā)送數(shù)據(jù)的,set mac address()是進(jìn)行網(wǎng)絡(luò)參數(shù)設(shè)置的。

當(dāng)linux初始化時(shí)將調(diào)用初始化函數(shù)intdevice_init(),該函數(shù)包括以下內(nèi)容:

注冊(cè)所用設(shè)備。linux用設(shè)備號(hào)來(lái)標(biāo)識(shí)字符設(shè)備和塊設(shè)備。設(shè)備號(hào)分為主設(shè)備號(hào)和從設(shè)備號(hào),最終形成設(shè)備接點(diǎn)。設(shè)備節(jié)點(diǎn)在訪問(wèn)字符設(shè)備和塊設(shè)備的設(shè)備驅(qū)動(dòng)程序時(shí)將使用。通常主設(shè)備號(hào)標(biāo)識(shí)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序,大多數(shù)設(shè)備是“一個(gè)主設(shè)備號(hào)對(duì)應(yīng)一個(gè)驅(qū)動(dòng)程序”,如:虛擬控制臺(tái)和串口終端由驅(qū)動(dòng)程序4管理。次設(shè)備號(hào)由內(nèi)核使用,用于確定設(shè)備文件所指的設(shè)備。字符設(shè)備和塊設(shè)備注冊(cè)時(shí)必須先定義好設(shè)備號(hào)。

字符設(shè)備注冊(cè)函數(shù)如下:

int register_chrdev(unsigned int major,constchar*name,struct file_oprations*fops);其中major是主設(shè)備號(hào)。

由于對(duì)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的訪問(wèn)不需要設(shè)備節(jié)點(diǎn),它的注冊(cè)函數(shù)如下:

int register_netdev(struct net_device*dev)

注冊(cè)設(shè)備所用的中斷。中斷在現(xiàn)代計(jì)算機(jī)結(jié)構(gòu)中有重要的地位,操作系統(tǒng)必須提供程序響應(yīng)中斷的能力。一般是把一個(gè)中斷處理程序注冊(cè)到系統(tǒng)中去。操作系統(tǒng)在硬件中斷發(fā)生后調(diào)用驅(qū)動(dòng)程序的處理程序。

注冊(cè)中斷所用的函數(shù)如下:其中,irq是中斷向量;handler是中斷處理函數(shù);flags是中斷處理中的掩碼;devices是設(shè)備名;dev_id是在中斷共享使用的id。

當(dāng)linux不使用該設(shè)備時(shí),就要調(diào)用清除函

編寫服務(wù)子程序

服務(wù)于I/O請(qǐng)求的子程序,又稱為驅(qū)動(dòng)程序的上半部分。調(diào)用這部分是由于系統(tǒng)調(diào)用的結(jié)果。這部分程序在執(zhí)行的時(shí)候,系統(tǒng)仍認(rèn)為是和進(jìn)行調(diào)用的進(jìn)程屬于同一個(gè)進(jìn)程,只是用戶態(tài)變成了核心態(tài),具有進(jìn)行此系統(tǒng)調(diào)用的用戶程序的運(yùn)行環(huán)境,因此可以在其中調(diào)用sleep等與進(jìn)程運(yùn)行環(huán)境有關(guān)的函數(shù)。

中斷服務(wù)子程序,又稱為驅(qū)動(dòng)程序的下半部分。在Linux系統(tǒng)中,并不是直接從中斷向量表中調(diào)用設(shè)備驅(qū)動(dòng)程序的中斷服務(wù)子程序,而是由Linux系統(tǒng)來(lái)接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務(wù)子程序。中斷可以產(chǎn)生在任何一個(gè)進(jìn)程運(yùn)行的時(shí)候,因此在中斷服務(wù)程序被調(diào)用的時(shí)候,不能依賴于任何進(jìn)程的狀態(tài),也就不能調(diào)用任何與進(jìn)程運(yùn)行環(huán)境相關(guān)的函數(shù)。因?yàn)樵O(shè)備驅(qū)動(dòng)程序一般支持同一類型的若干設(shè)備,所以一般在系統(tǒng)調(diào)用中斷服務(wù)程序的時(shí)候,都帶有一個(gè)或多個(gè)參數(shù),以唯一標(biāo)識(shí)請(qǐng)求服務(wù)的設(shè)備。

設(shè)備驅(qū)動(dòng)程序的使用

直接將驅(qū)動(dòng)程序編譯進(jìn)linux內(nèi)核

將設(shè)備驅(qū)動(dòng)程序復(fù)制到linux/drivers相關(guān)的子目錄下,比如字符設(shè)備驅(qū)動(dòng)程序就放在linux/drivers/char下。

修改linux/drivers相關(guān)的子目錄的Makefile,

如obj-$(config_dev_driver)+=dev_driver.o,這樣在編譯內(nèi)核時(shí)將會(huì)編譯dev_driver.c,生成dev_driver.o.

對(duì)內(nèi)核進(jìn)行重新編譯時(shí),進(jìn)行相關(guān)的配置,比如要使用AT91RM9200的UART,就要如下配置:

Character devices->Serial drivers.>AT91RM9200 serial port suppot

將驅(qū)動(dòng)程序編譯成驅(qū)動(dòng)模塊

在設(shè)備驅(qū)動(dòng)程序中要有兩個(gè)重要函數(shù):

module_init(dev-init),module_exit(dev_exit)

利用相應(yīng)的交叉編譯器以及編譯命令將驅(qū)動(dòng)程序dev_driver.c編譯成dev_driver.o這樣的動(dòng)態(tài)驅(qū)動(dòng)模塊。利用insmod命令給系統(tǒng)安裝驅(qū)動(dòng)模塊,如果在/dev目錄下沒(méi)有相應(yīng)的設(shè)備文件,就可以使用mknod創(chuàng)建一個(gè)設(shè)備文件。利用rmmod命令卸載驅(qū)動(dòng)模塊,設(shè)備文件的刪除可以用rm命令。

免责声明

本站为第三方开放式学习交流平台,所有内容均为用户上传,仅供参考,不代表本站立场。若内容不实请联系在线客服删除,服务时间:8:00~21:00。

AI写作,高效原创

在线指导,快速准确,满意为止

立即体验
文秘服务 AI帮写作 润色服务 论文发表