前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的驅(qū)動(dòng)程序設(shè)計(jì)主題范文,僅供參考,歡迎閱讀并收藏。
關(guān)鍵詞:CPCI 422;驅(qū)動(dòng)設(shè)計(jì);模塊互換;IVI規(guī)范
中圖分類(lèi)號(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總線(xiàn)通常用于串行數(shù)據(jù)通信,采用平衡的差分?jǐn)?shù)據(jù)傳輸方式,最大傳輸速率能達(dá)到10 Mb/s,最大傳輸距離為300 m。目前有關(guān)422的接口模塊種類(lèi)很多,為了實(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類(lèi)驅(qū)動(dòng)庫(kù)、IVI專(zhuān)用驅(qū)動(dòng)庫(kù)、IVI引擎、IVI配置實(shí)用程序、IVI配置信息文件。其中,IVI 類(lèi)驅(qū)動(dòng)器是儀器的功能和屬性集,通過(guò)這些功能和屬性集實(shí)現(xiàn)對(duì)一種儀器類(lèi)進(jìn)行控制。它是一組接口函數(shù),并不直接控制儀器工作。目前,已經(jīng)了示波器、數(shù)字萬(wàn)用表等8類(lèi)儀器規(guī)范\[2\]。IVI專(zhuān)用驅(qū)動(dòng)庫(kù)封裝了用于控制某一種儀器所需要的信息,能夠直接與儀器硬件通信。IVI 引擎主要完成狀態(tài)緩存、儀器屬性跟蹤、類(lèi)驅(qū)動(dòng)器到專(zhuān)用驅(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邏輯名稱(chēng),在測(cè)試程序中通過(guò)傳送邏輯名稱(chēng)將操作映像到具體儀器驅(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類(lèi)儀器的IVI驅(qū)動(dòng)開(kāi)發(fā),而且也提供一個(gè)名為“MAX”的IVI配置程序,用于配置儀器無(wú)關(guān)測(cè)試系統(tǒng)。同時(shí)也提供了一個(gè)專(zhuān)用驅(qū)動(dòng)庫(kù)開(kāi)發(fā)向?qū)?用以開(kāi)發(fā)專(zhuān)用驅(qū)動(dòng)\[4\]。但該向?qū)Р荒軐?duì)已有驅(qū)動(dòng)程序進(jìn)行升級(jí)和IVI標(biāo)準(zhǔn)封裝,NI公司也沒(méi)有提供類(lèi)驅(qū)動(dòng)庫(kù)的開(kāi)發(fā)向?qū)?加上類(lèi)驅(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總線(xiàn)接口,能通過(guò)422總線(xiàn)發(fā)送數(shù)據(jù),并且能接收被測(cè)設(shè)備通過(guò)422總線(xiàn)傳來(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類(lèi)驅(qū)動(dòng)函數(shù)庫(kù)。然后在類(lèi)驅(qū)動(dòng)函數(shù)庫(kù)基礎(chǔ)上開(kāi)發(fā)專(zhuān)用驅(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ò)專(zhuān)門(mén)的IVI配置實(shí)用軟件(如NI公司提供的MAX)或者其他文本編輯器進(jìn)行編輯。
基于IVI標(biāo)準(zhǔn)的驅(qū)動(dòng)程序配置引擎是整個(gè)IVI體系中的核心支柱。其主要功能就是實(shí)現(xiàn)類(lèi)驅(qū)動(dòng)庫(kù)到專(zhuān)用驅(qū)動(dòng)庫(kù)的映射,使應(yīng)用程序在調(diào)用類(lèi)驅(qū)動(dòng)庫(kù)時(shí)能自動(dòng)加載相應(yīng)配置的專(zhuān)用驅(qū)動(dòng)庫(kù)。
該設(shè)計(jì)中,IVI配置引擎設(shè)計(jì)的主要思路是通過(guò)讀取配置信息文件,由配置文件中所設(shè)置的模塊邏輯名找到對(duì)應(yīng)的專(zhuān)用驅(qū)動(dòng)庫(kù)信息字段。此字段主要包括專(zhuān)用驅(qū)動(dòng)庫(kù)路徑文件名、專(zhuān)用驅(qū)動(dòng)庫(kù)函數(shù)前綴等,然后通過(guò)這些一一對(duì)應(yīng)的映射關(guān)系,自動(dòng)加載專(zhuān)用驅(qū)動(dòng)庫(kù)。其工作流程如圖2所示。
該設(shè)計(jì)運(yùn)用函數(shù)ivi422Class_SpecificDriver實(shí)現(xiàn)自動(dòng)加載功能。下面為具體的函數(shù)設(shè)計(jì):
該函數(shù)核心是以代表專(zhuān)用驅(qū)動(dòng)庫(kù)文件名稱(chēng)為形式參數(shù),調(diào)用LoadLibrary( )函數(shù)加載專(zhuān)用驅(qū)動(dòng)庫(kù)。應(yīng)用程序只需通過(guò)類(lèi)驅(qū)動(dòng)庫(kù)及模塊的配置信息作為參數(shù),調(diào)用ivi422Class_SpecificDrive()函數(shù),即可實(shí)現(xiàn)專(zhuān)用驅(qū)動(dòng)庫(kù)的自動(dòng)加載。根據(jù)上面介紹可知,讀取配置文件以及根據(jù)配置文件自動(dòng)加載專(zhuān)用驅(qū)動(dòng)庫(kù),即可實(shí)現(xiàn)配置引擎的功能。
類(lèi)驅(qū)動(dòng)庫(kù)是IVI體系的外觀框架,用來(lái)控制一個(gè)特定類(lèi)型儀器的一系列功能和屬性。它是一組編程接口,而不對(duì)儀器進(jìn)行直接操作。該設(shè)計(jì)中,為了實(shí)現(xiàn)422模塊的正常通信,作為連接虛擬儀器硬件和應(yīng)用測(cè)試程序的紐帶,將422類(lèi)驅(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)加載專(zhuān)用驅(qū)動(dòng)庫(kù)[HJ0][HJ][HT5SS]
根據(jù)IVI規(guī)范,類(lèi)驅(qū)動(dòng)函數(shù)由函數(shù)名前綴加具體函數(shù)名構(gòu)成。在參數(shù)設(shè)置上均采用VISA數(shù)據(jù)類(lèi)型。在該設(shè)計(jì)中,類(lèi)驅(qū)動(dòng)函數(shù)均采用ivi422Class作為函數(shù)前綴名。現(xiàn)舉例如下:
該函數(shù)的功能是提供儀器初始化函數(shù)接口,其中返回值定義為ViStatus型,具體表示形式,參照IVI標(biāo)準(zhǔn),如IVI_SUCCESS。參數(shù)為ViSession型指針,用來(lái)返回儀器資源句柄。
根據(jù)前面介紹可知,類(lèi)驅(qū)動(dòng)函數(shù)只提供接口功能,不涉及具體儀器操作,現(xiàn)仍以初始化函數(shù)為例,介紹類(lèi)驅(qū)動(dòng)函數(shù)如何實(shí)現(xiàn)接口功能。其具體實(shí)現(xiàn)如下:
該函數(shù)的核心部分就是調(diào)用GetProcAddress(hDLL,FuncName)函數(shù),獲取專(zhuān)用驅(qū)動(dòng)庫(kù)函數(shù)對(duì)應(yīng)函數(shù)地址。其中,hDLL為在配置引擎功能中調(diào)用ivi422Class_SpecificDriver()函數(shù)獲取的專(zhuān)用驅(qū)動(dòng)庫(kù)句柄,FuncName為對(duì)應(yīng)函數(shù)名稱(chēng)。
對(duì)于專(zhuān)用驅(qū)動(dòng)動(dòng)態(tài)鏈接庫(kù)的開(kāi)發(fā),該設(shè)計(jì)未借助Labwindows/CVI中的專(zhuān)用驅(qū)動(dòng)開(kāi)發(fā)向?qū)?而是直接在VC中進(jìn)行編制。專(zhuān)用驅(qū)動(dòng)庫(kù)函數(shù)的主體函數(shù)名和參數(shù)類(lèi)型與類(lèi)驅(qū)動(dòng)是完全一致的,否則類(lèi)驅(qū)動(dòng)和專(zhuān)用驅(qū)動(dòng)之間的參數(shù)傳遞會(huì)出錯(cuò)\[8\]。為了與類(lèi)驅(qū)動(dòng)前綴名相區(qū)別,在該設(shè)計(jì)中,專(zhuān)用驅(qū)動(dòng)函數(shù)前綴名一律為ivi422。舉例如下:
函數(shù)則具體針對(duì)儀器操作,完成模塊初始化功能。
對(duì)于上層應(yīng)用程序,專(zhuān)用驅(qū)動(dòng)函數(shù)隱藏了具體硬件工作細(xì)節(jié),只以函數(shù)的形式提供了完成一項(xiàng)具體功能的接口。上層應(yīng)用程序只需要通過(guò)類(lèi)驅(qū)動(dòng)庫(kù)間接調(diào)用專(zhuān)用驅(qū)動(dòng)庫(kù)提供的函數(shù),即可完成對(duì)硬件的操作控制。規(guī)劃表中已經(jīng)列出了422操控的基本函數(shù),如果需要再增加函數(shù),只需要在類(lèi)驅(qū)動(dòng)的專(zhuān)用驅(qū)動(dòng)中同時(shí)增加,便能實(shí)現(xiàn)功能擴(kuò)展。
[BT3]2.3 CPCI 422模塊IVI驅(qū)動(dòng)程序中配置文件編輯
對(duì)于IVI 配置信息文件,可以通過(guò)專(zhuān)門(mén)的IVI配置實(shí)用軟件(如NI公司提供的MAX)進(jìn)行編輯。在該設(shè)計(jì)中,利用圖形化編程軟件自己設(shè)計(jì)以對(duì)話(huà)框?yàn)榛A(chǔ)的配置實(shí)用程序,通過(guò)此程序?qū)ε渲梦募M(jìn)行編輯。圖3為此程序的主界面。
通過(guò)此程序,修改配置文件中的邏輯名字段、描述字段、驅(qū)動(dòng)庫(kù)加載路徑字段,以及驅(qū)動(dòng)函數(shù)前綴字段、仿真調(diào)試字段。然后通過(guò)配置引擎對(duì)于配置文件的讀操作,建立類(lèi)驅(qū)動(dòng)庫(kù)和專(zhuān)用驅(qū)動(dòng)庫(kù)的正確映射。當(dāng)改變模塊時(shí),只需要改變模塊的邏輯名,以及模塊專(zhuān)用驅(qū)動(dòng)庫(kù)的加載路徑和前綴,而不需要修改類(lèi)驅(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 類(lèi)驅(qū)動(dòng)庫(kù),配置引擎,將該邏輯名與配置文件中的所有邏輯名進(jìn)行匹配,得到實(shí)際的 IVI專(zhuān)用驅(qū)動(dòng)庫(kù)指針,并實(shí)現(xiàn)該驅(qū)動(dòng)器的動(dòng)態(tài)加載;然后將 IVI 類(lèi)驅(qū)動(dòng)器中的函數(shù)和屬性與IVI 類(lèi)專(zhuān)用驅(qū)動(dòng)器的對(duì)應(yīng)函數(shù)和屬性進(jìn)行鏈接,使應(yīng)用程序可以間接地訪問(wèn)這些函數(shù)和屬性。在編制應(yīng)用程序時(shí),應(yīng)同時(shí)包含類(lèi)驅(qū)動(dòng)庫(kù)的動(dòng)態(tài)鏈接庫(kù)和頭文件,編制過(guò)程中,對(duì)開(kāi)發(fā)人員只需調(diào)用類(lèi)驅(qū)動(dòng)函數(shù)。┩4為應(yīng)用IVI體系基于422模塊的應(yīng)用程序調(diào)用驅(qū)動(dòng)工作流程。
通信卡的硬件設(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)銷(xiāo)。該卡有內(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控制器、總線(xiàn)競(jìng)爭(zhēng)仲裁器、串行通信控制器、數(shù)據(jù)緩沖存儲(chǔ)器SRAM、存儲(chǔ)器I/O映像和物理地址產(chǎn)生器、總線(xià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)本卡總線(xiàn)控制權(quán)。而總線(xiàn)上沒(méi)有給出主機(jī)CPU指令排隊(duì)狀態(tài)序列,故不能直接設(shè)計(jì)多主競(jìng)爭(zhēng),因而在本卡總線(xiàn)上用門(mén)陣列設(shè)計(jì)了一個(gè)狀態(tài)機(jī),不斷地監(jiān)視總線(xiàn)爭(zhēng)用情況,完成本卡總線(xiàn)競(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ǔ)器中??ㄉ蟂RAM不占用主機(jī)內(nèi)存地址,采用I/O映像,該適配器插入主機(jī)之后,主機(jī)通過(guò)系統(tǒng)I/O地址對(duì)其訪問(wèn),這由地址產(chǎn)生器完成??偩€(xiàn)接口包括數(shù)據(jù)收發(fā)器,數(shù)據(jù)開(kāi)關(guān)電路,讀、寫(xiě)及中斷等控制電路,地址譯碼等。波特率產(chǎn)生器提供了一個(gè)可編程的時(shí)鐘信號(hào)發(fā)生器,用戶(hù)可自行設(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 總線(xiàn)競(jìng)爭(zhēng)設(shè)計(jì)
由于同時(shí)可進(jìn)行四路通信,且CPU可隨時(shí)對(duì)某一路發(fā)控制命令或訪問(wèn)卡上SRAM存儲(chǔ)器,就將出現(xiàn)CPU與本卡主設(shè)備DMA爭(zhēng)用本卡總線(xiàn)的狀況。由于ISA總線(xiàn)沒(méi)能給出CPU指令排隊(duì)狀態(tài)序列,這給總線(xiàn)仲裁帶來(lái)了困難,而本卡的總線(xiàn)競(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)總線(xiàn)使用權(quán)時(shí),就進(jìn)入空閑狀態(tài),而一旦CPU或DMA請(qǐng)求總線(xiàn),狀態(tài)機(jī)立即將總線(xiàn)使用權(quán)交給CPU或DMA。如果正在CPU控制狀態(tài)期間,DMA申請(qǐng)總線(xiàn)使用權(quán),狀態(tài)機(jī)仍然判定CPU控制總線(xiàn),讓DMA處于等待,直到檢測(cè)CPU指令完成,狀態(tài)機(jī)才轉(zhuǎn)為DMA控制狀態(tài)。如果在DMA控制狀態(tài)時(shí),CPU申請(qǐng)總線(xiàn)使用權(quán),狀態(tài)機(jī)仍然判定DMA控制總線(xiàn),讓CPU處于等待,直至DMA字節(jié)傳送完,狀態(tài)機(jī)轉(zhuǎn)為CPU控制狀態(tài)。CPU及DMA對(duì)總線(xiàn)的使用權(quán)是單個(gè)指令或字節(jié)傳送,不設(shè)置總線(xiàn)封鎖,因而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)一的“文件”形式,用戶(hù)可以通過(guò)代表通信卡設(shè)備的文件名,在WIN32子系統(tǒng)中用文件操作函數(shù)來(lái)訪問(wèn)。該設(shè)備驅(qū)動(dòng)和程序可以根據(jù)用戶(hù)的需要,設(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ì)
在用戶(hù)態(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ù)完成后查詢(xún)得到??墒?,如果程序向當(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ù)例程采用客戶(hù)/服務(wù)器的模式設(shè)計(jì)。由于用戶(hù)的接收請(qǐng)求和硬件的接收并不是同步的,所以在設(shè)計(jì)中,為避免丟失數(shù)據(jù),考慮創(chuàng)造一個(gè)專(zhuān)門(mén)的接收線(xiàn)程。這樣,同步用戶(hù)請(qǐng)求、接收線(xiàn)程、硬件層之間的通信就必須仔細(xì)地設(shè)計(jì)。圖2示意了用戶(hù)態(tài)接收請(qǐng)求、接收線(xiàn)程以及硬件層之間的通信同步。
①硬件層與接收線(xiàn)程之間通信
硬件層與接收線(xiàn)程之間通信的同步是通過(guò)同步事件對(duì)象來(lái)實(shí)現(xiàn)的。同步事件對(duì)象通常處于無(wú)信號(hào)狀態(tài),只有當(dāng)成功地接收到一幀時(shí),才將該事件置為有信號(hào)狀態(tài)。接收線(xiàn)長(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),接收線(xiàn)程就會(huì)釋放阻塞。將通信卡SRAM上的接收數(shù)據(jù)讀進(jìn)接收線(xiàn)程緩沖區(qū)隊(duì)列,然后將同步事件對(duì)象置為無(wú)信號(hào)狀態(tài),接收線(xiàn)程再次阻塞,等待接收下一幀數(shù)據(jù)。
②用戶(hù)層和接收線(xiàn)程之間的通信
當(dāng)用戶(hù)提交接收任務(wù)時(shí),由驅(qū)動(dòng)程序的調(diào)度程序讀取接收線(xiàn)程的緩沖區(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è)通知事件,如果接收線(xiàn)程將SRAM中的數(shù)據(jù)讀進(jìn)隊(duì)列,就將相應(yīng)的通知事件置為有信號(hào)狀態(tài),用戶(hù)請(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ù)程序,初始化線(xiàn)程、事件、信號(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)燈、線(xiàn)程以及連鎖等,都必須將其存儲(chǔ)在Nopaged內(nèi)存中,否則,會(huì)造成系統(tǒng)崩潰。
關(guān)鍵詞:嵌入式;CF卡;低層驅(qū)動(dòng);存儲(chǔ)設(shè)備
中圖分類(lèi)號(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è)備注銷(xiāo)函數(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)在讀寫(xiě)命令時(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命令值寫(xiě)入對(duì)應(yīng)的寄存器,并向CF卡ATA命令,即完成了ATA命令。
(2)填寫(xiě)ATA命令控制塊后,CF卡可以利用輪詢(xún)的方法對(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è)定為T(mén)ureIDE工作模式,這樣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.
windows nt是一個(gè)功能全面的操作系統(tǒng),具有完全集成式的連網(wǎng)能力,它的網(wǎng)絡(luò)模型開(kāi)始于mac子層,網(wǎng)絡(luò)接口卡(network interface card以后簡(jiǎn)稱(chēng)網(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ī)范了軟件接口──稱(chēng)為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)寫(xiě),不允許多重標(biāo)準(zhǔn)。例如一個(gè)網(wǎng)卡驅(qū)動(dòng)程序(在ndis接口的下面)就不需要特地按每個(gè)傳輸協(xié)議來(lái)寫(xiě)它的代碼塊,恰恰相反,該驅(qū)動(dòng)程序是寫(xiě)給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支持兩種類(lèi)型的網(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)題以及處理器、線(xiàn)程的同步,這樣不同的開(kāi)發(fā)者在大量重復(fù)著許多相同的工作。
而miniport網(wǎng)卡驅(qū)動(dòng)程序允許開(kāi)發(fā)者僅僅寫(xiě)一些與網(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)信息。為查詢(xún)這些信息,上層驅(qū)動(dòng)程序調(diào)用ndisrequest向ndis接口庫(kù)指示oid。oid表示了調(diào)用所需的信息類(lèi)型,如miniport驅(qū)動(dòng)程序所支持的lookahead緩沖區(qū)大小等。ndis接到上層驅(qū)動(dòng)程序的查詢(xún)請(qǐng)求,將oid傳遞給上邊緣函數(shù)miniportqueryinformation實(shí)現(xiàn)對(duì)oid的查詢(xún),如果上層驅(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ù)稱(chēng)為上邊緣服務(wù)函數(shù)。
這些上邊緣服務(wù)函數(shù)由驅(qū)動(dòng)程序的開(kāi)發(fā)者根據(jù)驅(qū)動(dòng)程序面向的特定低層網(wǎng)絡(luò)類(lèi)型和硬件以及相應(yīng)環(huán)境,可以有選擇地實(shí)現(xiàn),但必須保證驅(qū)動(dòng)程序最基本的功能,這些基本功能包括初始化、發(fā)送、中斷處理、重置、參數(shù)查詢(xún)與設(shè)置和報(bào)文接收。
miniportinitialize:操作系統(tǒng)根據(jù)系統(tǒng)配置信息,檢測(cè)出網(wǎng)卡已安裝時(shí),由ndis接口在初始化時(shí)調(diào)用,主要完成低層網(wǎng)絡(luò)類(lèi)型確定,對(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:查詢(xún)網(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)行的工作包括初始中斷處理類(lèi)型,決定是否進(jìn)行中斷轉(zhuǎn)交,對(duì)卡上中斷進(jìn)行處理 等,該服務(wù)類(lèi)型只在以下情況被調(diào)用:
ndis接口調(diào)用miniportinitialize和miniporthalt兩函數(shù)時(shí)。
.中斷處理類(lèi)型設(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í)寫(xiě)入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)卡,必須在編寫(xiě)其oemsetup.inf文件時(shí)確定以下硬件參數(shù):
總線(xiàn)類(lèi)型:pci(5)……括號(hào)中的數(shù)字5表示pci總線(xiàn)在ndis中的總線(xiàn)類(lèi)型代碼;
廠商代號(hào):0x5588……系統(tǒng)加載時(shí)確定網(wǎng)卡的標(biāo)記,也是編程時(shí)確定pci槽號(hào)的標(biāo)識(shí);
cfid: 0x01;
介質(zhì)類(lèi)型:光纖(3) ……括號(hào)中的數(shù)字表示光纖在ndis中的介質(zhì)類(lèi)型代碼;
是否支持全雙工:支持。
對(duì)于其它的硬件信息在此inf配置信息文件中可有可無(wú),如若配置,則可在驅(qū)動(dòng)程序的編寫(xiě)時(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編寫(xiě)inf信息配置文件
gui inf描述語(yǔ)言被windows nt用以書(shū)寫(xiě)系統(tǒng)所有部件的配置文件,當(dāng)然也可以用以書(shū)寫(xiě)網(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é)(類(lèi)似于函數(shù)),shell節(jié)(也類(lèi)似于函數(shù),但可調(diào)用insall和shell節(jié)),detect節(jié)(不包含命令),一個(gè)配置文件一般由若干不同類(lèi)型的節(jié)組成。驅(qū)動(dòng)程序的開(kāi)發(fā)者根據(jù)需要可以在配置文件中編寫(xiě)相應(yīng)代碼,使得用戶(hù)和系統(tǒng)之間能進(jìn)行交互,并且由用戶(hù)決定一些配置參數(shù)。
nt網(wǎng)卡配置文件有其一套規(guī)范,驅(qū)動(dòng)程序開(kāi)發(fā)者必須按規(guī)范編寫(xiě)配置文件,一般來(lái)說(shuō),一個(gè)配置文件至少應(yīng)該提供下面三個(gè)節(jié):
安裝入口點(diǎn):[identify]shell節(jié)。該節(jié)主要功能是給出安裝部件的類(lèi)型名,系統(tǒng)通過(guò)它識(shí)別該部件屬于哪一大類(lèi)(display,mouse,scsi,network等)中的哪一類(lèi)(網(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)卡名(有些配置文件支持多類(lèi)網(wǎng)卡,此時(shí)必須讓用戶(hù)進(jìn)行選擇,并獲得選擇結(jié)果)。
[installoption]shell節(jié)。該節(jié)是配置文件得主體,也是上次安裝完后再次進(jìn)行配置、刪除、更新的入口點(diǎn)。主要功能是拷貝映像文件和配置文件,生成配置的各種選項(xiàng),創(chuàng)建該部件在注冊(cè)庫(kù)中對(duì)應(yīng)的各種登錄子樹(shù)并更新重寫(xiě)。
第二節(jié) 驅(qū)動(dòng)程序的加載過(guò)程
§2.2.1 windows nt的啟動(dòng)過(guò)程
關(guān)鍵詞:WDMDriver;Windows;例程;DLL
中圖分類(lèi)號(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ī)制主要分為兩類(lèi)。一類(lèi)是以前的Dos 和Windows98系統(tǒng),在這類(lèi)環(huán)境下可以直接完成對(duì)I/O 端口的讀寫(xiě);另一類(lèi)是NT4.0以上版本W(wǎng)indows系統(tǒng),在這類(lèi)環(huán)境下,為了使系統(tǒng)變得更為安全,Windows對(duì)系統(tǒng)底層操作采取了屏蔽策略,不允許用戶(hù)態(tài)的應(yīng)用程序直接訪問(wèn)I/O端口,而是通過(guò)編寫(xiě)驅(qū)動(dòng)程序,這樣可以使用Kernel層設(shè)備驅(qū)動(dòng)程序提供的各種服務(wù)間接地訪問(wèn)I/O,因此編寫(xiě)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í);③ 用戶(hù)程序發(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è)備,并查詢(xún)驅(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 類(lèi)型,它包括一個(gè)CM_PARTIAL_RESOURCE_DESCRIPTOR 結(jié)構(gòu)的計(jì)數(shù)數(shù)組。
數(shù)組中每一個(gè)資源描述符都有一個(gè)Type 成員[3],它表示所代表的資源的類(lèi)型。主要有4個(gè)重要的共同體類(lèi)型是Port(端口)、Interrupt(中斷)、Memory(內(nèi)存)、Dma(直接內(nèi)存訪問(wèn))。得到了設(shè)備的I/O地址,就可以對(duì)設(shè)備進(jìn)行讀取了,在讀寫(xiě)端口地址和內(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ò)專(zhuān)用的API 函數(shù)操作硬件,但由于這些函數(shù)攜帶參數(shù)很多,使用起來(lái)并不方便,因此可以另外開(kāi)發(fā)一套用于中轉(zhuǎn)數(shù)據(jù)的功能函數(shù)集(動(dòng)態(tài)鏈接庫(kù)),可以使得底層驅(qū)動(dòng)設(shè)備對(duì)用戶(hù)是透明的[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)程序模型具有較好的可移植性:編寫(xiě)驅(qū)動(dòng)程序時(shí),WDM規(guī)定只使用ANSI C標(biāo)準(zhǔn)規(guī)定的語(yǔ)言元素;硬件和軟件的可配置性靈活:使用HAL工具調(diào)用低級(jí)總線(xiàn)驅(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.
0、引言
“面向?qū)ο蟪绦蛟O(shè)計(jì)”是軟件工程專(zhuān)業(yè)和計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的一門(mén)專(zhuān)業(yè)核心課程。該課程是軟件工程等課程的先修課程,同時(shí)又是進(jìn)行軟件開(kāi)發(fā)的直接工具,是把所學(xué)的專(zhuān)業(yè)知識(shí)轉(zhuǎn)化為應(yīng)用的橋梁,是學(xué)生就業(yè)專(zhuān)業(yè)知識(shí)的關(guān)鍵技術(shù),所以該課程在整個(gè)教學(xué)體系中占據(jù)非常重要的地位。目前該課程在教學(xué)中仍普遍采用傳統(tǒng)的以語(yǔ)法講授為主線(xiàn)的課堂教學(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é)改革第一線(xiàn)的教學(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)系或一致的話(huà),學(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ì)別人有影響的事情的話(huà),學(xué)習(xí)就會(huì)更有積極性。項(xiàng)目驅(qū)動(dòng)的教學(xué)通過(guò)與實(shí)際應(yīng)用相關(guān)的項(xiàng)目來(lái)提供一門(mén)課程的教學(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%,撰寫(xiě)論文或報(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í)。
關(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í)的能力。《C#程序設(shè)計(jì)》是我校計(jì)算機(jī)應(yīng)用專(zhuān)業(yè)的一門(mén)核心課程,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ā)交給用戶(hù)為止,通過(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é)。為了能夠滿(mǎn)足就業(yè)的需求,我們做的第一件事情就是去軟件開(kāi)發(fā)企業(yè)了解用人狀況和技術(shù)需求,通過(guò)對(duì)掌握的一手?jǐn)?shù)據(jù)進(jìn)行詳細(xì)分析和多次專(zhuān)家研討,比較全面地掌握企業(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)稱(chēng)“學(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)等方面。“不要去背誦對(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è)類(lèi)似的項(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)不同類(lèi)型用戶(hù)登錄考試管理系統(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í)體類(lèi)、編寫(xiě)實(shí)體類(lèi)。(2)設(shè)計(jì)用戶(hù)界面。(3)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層。(4)實(shí)現(xiàn)業(yè)務(wù)邏輯層。(5)實(shí)現(xiàn)表示層數(shù)據(jù)綁定。
關(guān)鍵技術(shù):使用實(shí)體類(lèi)消除關(guān)系數(shù)據(jù)與類(lèi)之間的差別,通過(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ù)管理員表中找到存在的用戶(hù)名及密碼并輸入登錄窗體,選擇用戶(hù)類(lèi)別為管理員,進(jìn)入管理員窗體界面。至此完成管理員窗體的登錄,學(xué)生已有了小小的成就感,接下來(lái)讓學(xué)生獨(dú)立完成子任務(wù)2:完成學(xué)員窗體的登錄,同時(shí)培養(yǎng)了學(xué)生對(duì)知識(shí)的再學(xué)習(xí)能力。
學(xué)習(xí)任務(wù)2:用實(shí)體類(lèi)實(shí)現(xiàn)教員賬戶(hù)創(chuàng)建、實(shí)現(xiàn)教員信息預(yù)覽、編輯。
子任務(wù)1:用實(shí)體類(lèi)實(shí)現(xiàn)教員賬戶(hù)創(chuàng)建。
子任務(wù)2:用實(shí)體類(lèi)實(shí)現(xiàn)教員信息預(yù)覽。
子任務(wù)3:用實(shí)體類(lèi)實(shí)現(xiàn)教員信息編輯。
2.4 基于“共享型教學(xué)資源”的教學(xué)模式
創(chuàng)建基于共享型教學(xué)資源平臺(tái),建成以“共享型教學(xué)資源庫(kù)”為核心,以“開(kāi)放型教學(xué)平臺(tái)”為載體,具有行業(yè)企業(yè)參與、滿(mǎn)足廣大師生自我學(xué)習(xí)和自我提高、滿(mǎn)足服務(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)在線(xiàn)學(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é)作完成并在線(xiàn)提交任務(wù)。教師和企業(yè)專(zhuān)家給出任務(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>
本門(mén)課程的教學(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]北京阿博泰克北大青鳥(niǎo)信息技術(shù)有限公司.在.NET框架下開(kāi)發(fā)三層結(jié)構(gòu)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)[M].北京:科學(xué)技術(shù)文獻(xiàn)出版社,2008.
[關(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)
[中圖分類(lèi)號(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人才屬?lài)?guó)內(nèi)人才緊缺指數(shù)較高的一類(lèi),優(yōu)秀的JAVA編程人員更是尤其缺乏。隨著3G、物聯(lián)網(wǎng)時(shí)代的到來(lái),JAVA語(yǔ)言不僅不會(huì)“過(guò)時(shí)”,相反,它將會(huì)在新的業(yè)務(wù)領(lǐng)域有著更輝煌的發(fā)展前景。正因如此,目前各類(lèi)高校均將JAVA作為計(jì)算機(jī)專(zhuān)業(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é),教材怎么寫(xiě),教師就怎么講,學(xué)生就怎么學(xué)。一般方法是教師根據(jù)大綱和教材,針對(duì)某個(gè)知識(shí)點(diǎn)進(jìn)行重點(diǎn)講授,列舉若干驗(yàn)證性的實(shí)驗(yàn)加以佐證,學(xué)生亦通過(guò)上機(jī)編寫(xiě)一些小的算法,對(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)的各類(lèi)環(huán)境配置、OOP思想、類(lèi)庫(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ì)、代碼編寫(xiě)以及測(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),打下了良好的專(zhuān)業(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)為例,首先將教師在以往工作中編寫(xiě)的系統(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é)生分組撰寫(xiě)實(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ā)編寫(xiě)的代碼數(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ì)一門(mén)學(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í)和專(zhuān)業(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)地接受“滿(mǎn)堂灌”,而必須充分發(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)解及成果。
關(guān)鍵詞:實(shí)例操作;可視化程序設(shè)計(jì);教學(xué)研究
中圖分類(lèi)號(hào):G642.0 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-0079(2014)11-0163-02
可視化程序設(shè)計(jì)是學(xué)習(xí)可視化程序設(shè)計(jì)基本理論和原理的實(shí)踐性、綜合性、應(yīng)用性很強(qiáng)的課程。在計(jì)算機(jī)、信息等相關(guān)專(zhuān)業(yè)的教學(xué)體系中,實(shí)際上存在相當(dāng)多的可視化程序設(shè)計(jì)類(lèi)課程,如:C#、Visual Basic、Delphi等等。這些可視化程序設(shè)計(jì)課程的宗旨是使學(xué)生了解現(xiàn)代程序設(shè)計(jì)理論中的面向?qū)ο缶幊毯涂梢暬绦蛟O(shè)計(jì)等的基本思想,培養(yǎng)學(xué)生應(yīng)用程序設(shè)計(jì)技術(shù)來(lái)解決實(shí)際問(wèn)題的能力。本文結(jié)合該課程性質(zhì)與定位分析,針對(duì)該課程傳統(tǒng)教學(xué)中存在的問(wèn)題,以強(qiáng)化實(shí)際動(dòng)手操作能力培養(yǎng)為目標(biāo),探索實(shí)例操作驅(qū)動(dòng)的教學(xué)方法在該課程教學(xué)中的應(yīng)用。
一、課程定位與分析
教學(xué)方法是由課程性質(zhì)及教學(xué)目標(biāo)所決定的,無(wú)論采用什么教學(xué)方法都要緊緊圍繞課程性質(zhì)和教學(xué)目標(biāo)展開(kāi)。在探討可視化程序設(shè)計(jì)的教學(xué)方法之前有必要對(duì)課程性質(zhì)及教學(xué)目標(biāo)進(jìn)行分析。
1.課程性質(zhì)與目標(biāo)
可視化程序設(shè)計(jì)課程要求學(xué)生既要掌握理論知識(shí),更要掌握操作技能并能在實(shí)際中應(yīng)用??梢暬绦蛟O(shè)計(jì)課程集編程理論與操作實(shí)踐于一身,然而課程本身的抽象性與復(fù)雜性使學(xué)生無(wú)法完全理解并有效應(yīng)用所學(xué)理論知識(shí)。只有在實(shí)踐中學(xué)生才能真正學(xué)會(huì)編寫(xiě)和調(diào)試程序,從而更好地掌握程序設(shè)計(jì)的理論知識(shí),提高利用理論知識(shí)解決實(shí)際問(wèn)題的能力。
可視化程序設(shè)計(jì)類(lèi)課程由于實(shí)踐性很強(qiáng),所以其性質(zhì)應(yīng)該定位在實(shí)踐性課程、操作性課程。也就是說(shuō),課程歸根結(jié)底應(yīng)該教會(huì)學(xué)生怎么做,讓學(xué)生愿動(dòng)手、能動(dòng)手、會(huì)動(dòng)手來(lái)實(shí)際操作,強(qiáng)調(diào)實(shí)踐性,培養(yǎng)動(dòng)手能力應(yīng)該是第一位的。
2.實(shí)例教學(xué)
針對(duì)可視化程序設(shè)計(jì)的課程性質(zhì)與目標(biāo),按照學(xué)生的認(rèn)知規(guī)律組織教學(xué),毫無(wú)疑問(wèn)實(shí)例教學(xué)是一個(gè)理想選擇。實(shí)例教學(xué)法已經(jīng)在多個(gè)學(xué)科的教學(xué)中應(yīng)用,并收到了良好的效果。豐富的教學(xué)實(shí)例能夠提高學(xué)生的學(xué)習(xí)興趣,實(shí)例教學(xué)增強(qiáng)了課堂教學(xué)的靈活性和易懂性,極大地提高學(xué)生的學(xué)習(xí)興趣和主動(dòng)性。實(shí)例教學(xué)有利于學(xué)生理論與實(shí)際的結(jié)合,有利于培養(yǎng)出實(shí)用型人才。在實(shí)例教學(xué)中,教師要本著理論與實(shí)際相結(jié)合的宗旨,遵循教學(xué)目的要求,以實(shí)例為基本素材,展開(kāi)教學(xué)內(nèi)容,培養(yǎng)學(xué)生分析和解決問(wèn)題的能力,加深他們對(duì)可視化程序設(shè)計(jì)理論知識(shí)的理解。在實(shí)例教學(xué)中始終堅(jiān)持以用為本,將語(yǔ)法、命令、控件等具體使用融于實(shí)例開(kāi)發(fā)過(guò)程中。以學(xué)生的已有知識(shí)為基礎(chǔ),按照學(xué)生的認(rèn)知規(guī)律,遵循先易后難、先具體后抽象的原則,通過(guò)觀看、模仿、理解、總結(jié)、提高等階段進(jìn)行教學(xué)。
3.實(shí)例與編程思想
可視化程序設(shè)計(jì)實(shí)例教學(xué)中有一個(gè)重要的階段就是學(xué)生模仿,也就是依葫蘆畫(huà)瓢,照葫蘆畫(huà)樣。毋庸置疑,編程思想對(duì)于程序開(kāi)發(fā)人員至關(guān)重要,教師應(yīng)該在程序設(shè)計(jì)課程中幫助學(xué)生形成和訓(xùn)練良好的編程思想。巧婦難為無(wú)米之炊,學(xué)生只有在具備一定量的實(shí)例編程基礎(chǔ)之上,才能構(gòu)建和形成編程思想,否則,沒(méi)有較多的實(shí)際操作體驗(yàn),編程思想的訓(xùn)練只是空談。實(shí)例的模仿、學(xué)習(xí)與演練也有利于學(xué)生熟悉編程步驟、形成編程規(guī)范,然而編程步驟與規(guī)范并不等同于編程思想的僵化。實(shí)例教學(xué)能使學(xué)生從課堂和課后實(shí)例的反復(fù)練習(xí)中總結(jié)一般的算法,進(jìn)而從算法升華為編程思想。
此外,編程思想的訓(xùn)練是一個(gè)系統(tǒng)工程,從縱向維度來(lái)看,它貫穿于可視化程序設(shè)計(jì)課程所在的整個(gè)課程體系中??梢暬绦蛟O(shè)計(jì)課程的前置課程如C/C++程序設(shè)計(jì)側(cè)重程序設(shè)計(jì)基礎(chǔ)與語(yǔ)法,同時(shí)涉及算法與編程思想,后置或關(guān)聯(lián)課程如算法設(shè)計(jì)與分析等更是著重解決編程思想的問(wèn)題,因而沒(méi)必要將編程思想的形成和訓(xùn)練畢其功于一役,完全集中在可視化程序設(shè)計(jì)課程中,盡管這一點(diǎn)在該課程中必要而且十分重要。因?yàn)閷W(xué)生有了編程思想以后就可以遵循編程規(guī)范來(lái)指導(dǎo)自己的編程過(guò)程,能獨(dú)立完成編程任務(wù)了。
二、傳統(tǒng)的多媒體教學(xué)不足
教學(xué)過(guò)程是對(duì)教學(xué)思想和教學(xué)方法的具體體現(xiàn)??梢暬幊陶Z(yǔ)言教學(xué)基于面向?qū)ο蟮木幊虣C(jī)制,它繼承了順序程序設(shè)計(jì)的思想,重點(diǎn)講述類(lèi)、對(duì)象、控件的方法、事件與屬性,在教學(xué)中以多媒體教學(xué)為主,以體現(xiàn)可視化程序設(shè)計(jì)對(duì)控件等對(duì)象操作的特點(diǎn),問(wèn)題的關(guān)鍵在于如何借助多媒體實(shí)施可視化程序設(shè)計(jì)課堂教學(xué)。傳統(tǒng)的多媒體課堂教學(xué)方法包括以下三種:
方法一:課堂借助多媒體投影主要講授可視化編程理論知識(shí),較少加入實(shí)例項(xiàng)目到課堂中??梢暬绦蛟O(shè)計(jì)實(shí)踐性非常強(qiáng),并且可視化程序設(shè)計(jì)理論知識(shí)抽象性和復(fù)雜性強(qiáng),缺少實(shí)例將很難保證課堂講授效果。
方法二:課下在課件中編寫(xiě)實(shí)例代碼,課上利用多媒體投影展示代碼。教師課前將代碼放在幻燈片上,在課堂上將含有代碼的幻燈片打開(kāi),直接展示給學(xué)生,甚至教師還針對(duì)代碼做一些必要的講解。該方法無(wú)法直接運(yùn)行程序,缺乏程序結(jié)果的可見(jiàn)性,并且學(xué)生也看不到項(xiàng)目或解決方案的詳細(xì)建立過(guò)程。
方法三:課下利用開(kāi)發(fā)環(huán)境建立好實(shí)例,課上利用多媒體投影展示實(shí)例并演示。該方法相對(duì)方法二來(lái)講,可以直接運(yùn)行出程序結(jié)果,增加了一定的趣味性和直觀性。缺點(diǎn)仍然在于學(xué)生看不到項(xiàng)目或解決方案是如何建立的。
以上的這些教學(xué)方法,學(xué)生需要自己琢磨詳細(xì)操作過(guò)程,其結(jié)果是不少學(xué)生因?yàn)閷?shí)例操作步驟不清晰而花費(fèi)了很長(zhǎng)時(shí)間也沒(méi)能成功編程完成實(shí)例。多次這樣的經(jīng)歷就使得這些學(xué)生對(duì)可視化程序設(shè)計(jì)失去了信心,自然也就對(duì)課程失去了興趣,這樣的現(xiàn)象在課程開(kāi)始之初表現(xiàn)得尤為突出。
三、教學(xué)實(shí)施分析
試想,倘若人們?cè)趯?shí)際生活中需要學(xué)習(xí)一項(xiàng)之前從不會(huì)的技能或?qū)W做一件之前從不會(huì)做的事情,比如說(shuō)學(xué)習(xí)汽車(chē)駕駛,最希望得到什么樣的指導(dǎo)?毫無(wú)疑問(wèn),絕大部分的人都希望有人能手把手地教他這項(xiàng)技能或教他做這件事情。同樣,經(jīng)過(guò)調(diào)查,對(duì)于程序設(shè)計(jì),尤其是可視化程序設(shè)計(jì),幾乎所有學(xué)生希望得到的也是有教師能手把手地教他如何操作。由教師一對(duì)一實(shí)實(shí)在在手把手來(lái)教所有學(xué)生,在課堂教學(xué)甚至實(shí)驗(yàn)教學(xué)中實(shí)際實(shí)施起來(lái)具有很大的難度,尤其是在學(xué)生人數(shù)較多的情況下。事實(shí)上,手把手的教學(xué)過(guò)程可以由展示實(shí)例詳細(xì)操作過(guò)程來(lái)近似替代。于是,實(shí)例的詳細(xì)操作過(guò)程的展示就成為基于實(shí)例的教學(xué)方法的至關(guān)重要的一環(huán)。
1.展示實(shí)例操作過(guò)程
如何展示實(shí)例的詳細(xì)操作過(guò)程?現(xiàn)場(chǎng)開(kāi)發(fā)實(shí)例是一個(gè)直觀的選擇,這其中包括兩種做法。第一,現(xiàn)場(chǎng)利用開(kāi)發(fā)環(huán)境建立實(shí)例及編寫(xiě)代碼,利用多媒體投影展示。[1]該方法將完整建立過(guò)程展示給學(xué)生,但現(xiàn)場(chǎng)編寫(xiě)代碼費(fèi)時(shí),講授課堂內(nèi)容效率較低。第二,課下編寫(xiě)實(shí)例代碼,現(xiàn)場(chǎng)利用開(kāi)發(fā)環(huán)境建立實(shí)例,利用多媒體投影展示。該方法將完整建立過(guò)程展示給學(xué)生,并且期間直接粘貼課下已編寫(xiě)好的代碼,相比第一點(diǎn)提高了課堂教學(xué)的效率。這兩種現(xiàn)場(chǎng)建立實(shí)例項(xiàng)目的方法在項(xiàng)目簡(jiǎn)單、代碼量少的情況固然能取得一定效果,但畢竟即使是具有豐富開(kāi)發(fā)經(jīng)驗(yàn)的教師,在課堂上現(xiàn)場(chǎng)開(kāi)發(fā)實(shí)例也可能遇到意料之外的程序錯(cuò)誤,甚至數(shù)次調(diào)試都無(wú)法成功解決。其直接結(jié)果就是一直卡在出錯(cuò)處,課程無(wú)法繼續(xù)進(jìn)行,浪費(fèi)了大量的課堂時(shí)間,最嚴(yán)重的后果可能導(dǎo)致學(xué)生對(duì)教師失去信心。事實(shí)上,任何編程者都無(wú)法保證在遇到每個(gè)程序問(wèn)題時(shí)都能迅速解決。
實(shí)例的詳細(xì)操作過(guò)程的動(dòng)畫(huà)錄制與展示看似是對(duì)現(xiàn)場(chǎng)開(kāi)發(fā)實(shí)例的一種互補(bǔ),但它是相比現(xiàn)場(chǎng)開(kāi)發(fā)實(shí)例更為可取的一種做法。教師課前進(jìn)行實(shí)例操作過(guò)程的動(dòng)畫(huà)錄制,準(zhǔn)備課堂實(shí)例的動(dòng)畫(huà)演示課件,演示課件主要包含實(shí)例的詳細(xì)操作全過(guò)程錄像,也可以加上必要的文字甚至語(yǔ)音解說(shuō)。實(shí)例操作過(guò)程的錄制通常可以借助屏幕錄像類(lèi)的軟件,比如屏幕錄像專(zhuān)家、RoboDemo等來(lái)完成。學(xué)生可以下載這些演示課件并對(duì)實(shí)例進(jìn)行模仿操練,這樣就使得教師實(shí)際編程的過(guò)程可以回放,課堂的實(shí)例教學(xué)得以延續(xù)。
2.實(shí)例的準(zhǔn)備
實(shí)施實(shí)例教學(xué)前要進(jìn)行充分的準(zhǔn)備,實(shí)例教學(xué)的成敗與準(zhǔn)備充分與否關(guān)系緊密,要有充足的準(zhǔn)備時(shí)間,而且要認(rèn)真思考學(xué)生的學(xué)習(xí)興趣點(diǎn)。要對(duì)學(xué)生的己有的知識(shí)水平和能力進(jìn)行調(diào)查和了解分析,也就是要了解學(xué)生已有的計(jì)算機(jī)知識(shí)水平和對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)的了解程度,只有這樣才能在具體內(nèi)容的講解和實(shí)例的選擇演示方面有所把握。
實(shí)例的選取是實(shí)例教學(xué)的關(guān)鍵環(huán)節(jié),由于實(shí)例教學(xué)是以實(shí)例展開(kāi)的,實(shí)例選取的好壞直接影響到教學(xué)的效果及質(zhì)量,所以要精心選編實(shí)例。實(shí)例選擇時(shí)要注意:[2]第一,實(shí)例要精。實(shí)例選取要有針對(duì)性、典型性和代表性,緊扣教學(xué)重點(diǎn)、難點(diǎn)、編程理論進(jìn)行選編,這種實(shí)例的教學(xué)有助于達(dá)到舉一反三的效果。第二,實(shí)例要實(shí)。實(shí)例選取不僅要從學(xué)生的實(shí)際情況出發(fā),還要從實(shí)際生活出發(fā),既要體現(xiàn)教學(xué)目的和要求,也要反映實(shí)際生活的需求,更要能提高學(xué)生的學(xué)習(xí)興趣。實(shí)例的選取除了選擇教材上的典型實(shí)例外,可以由教師自己編制一些源自于實(shí)際項(xiàng)目的更為實(shí)際的例子。
3.課后及時(shí)操練
實(shí)例教學(xué)實(shí)施過(guò)程中,課后操練這一環(huán)節(jié)是非常重要的,它是讓學(xué)生理解掌握可視化程序設(shè)計(jì)理論、培養(yǎng)解決問(wèn)題能力的主戰(zhàn)場(chǎng)。學(xué)生觀看了實(shí)例的詳細(xì)操作過(guò)程后,只有反復(fù)模仿、操練,才能理解、總結(jié),并進(jìn)行實(shí)例的拓展,獲得能力的提高。操練的實(shí)例一方面來(lái)源于課堂上講解的實(shí)例或教師錄制好的實(shí)例,另一方面來(lái)源于接近但超越這些實(shí)例的作業(yè),這些題材包含了對(duì)實(shí)例的分層次拓展與完善。此外,教師有必要設(shè)計(jì)良好的類(lèi)游戲規(guī)則激發(fā)學(xué)生對(duì)于實(shí)例操練的興趣,自覺(jué)地去實(shí)施這一過(guò)程,這些規(guī)則比如有積分動(dòng)態(tài)排行榜等。教師也可以借助自己創(chuàng)建的教學(xué)論壇解決學(xué)生在完成作業(yè)和學(xué)習(xí)過(guò)程中遇到的問(wèn)題,并在論壇上開(kāi)展關(guān)于可視化編程學(xué)習(xí)的討論,激發(fā)學(xué)生的學(xué)習(xí)興趣,培養(yǎng)學(xué)習(xí)氛圍。
四、總結(jié)
實(shí)例操作驅(qū)動(dòng)的可視化程序設(shè)計(jì)教學(xué)方法強(qiáng)調(diào)實(shí)例教學(xué),并且著重展示實(shí)例的詳細(xì)操作構(gòu)建過(guò)程,目的在于教會(huì)學(xué)生怎么做,讓學(xué)生愿動(dòng)手、能動(dòng)手、會(huì)動(dòng)手來(lái)實(shí)際操作。在這種教學(xué)方法中,學(xué)生可以獲知編程任務(wù)如何下手,也能成功地完成編程實(shí)例,給其可視化編程奠定良好的起步,極大激發(fā)了學(xué)生的學(xué)習(xí)興趣,提高了學(xué)生的學(xué)習(xí)主動(dòng)性與積極性。在教學(xué)實(shí)施中教師本著實(shí)而精的原則準(zhǔn)備好實(shí)例,包括花功夫精心選取、編制實(shí)例,認(rèn)真細(xì)致地進(jìn)行實(shí)例詳細(xì)操作過(guò)程的動(dòng)畫(huà)錄制,給學(xué)生模仿操練、拓展提高打下良好的基礎(chǔ),使課堂教學(xué)得以延續(xù)。學(xué)生課后針對(duì)實(shí)例和作業(yè)及時(shí)操練、鞏固所學(xué),也就不僅能掌握可視化編程理論知識(shí),還能扎實(shí)地培養(yǎng)動(dòng)手能力,培養(yǎng)應(yīng)用可視化編程解決實(shí)際問(wèn)題的能力。實(shí)例操作驅(qū)動(dòng)的可視化程序設(shè)計(jì)教學(xué)基于實(shí)例操作的詳細(xì)展示,突破課堂教學(xué)的時(shí)間與空間限制,融教、學(xué)和做為一體,提高了教學(xué)實(shí)效。
參考文獻(xiàn):
級(jí)別:省級(jí)期刊
榮譽(yù):中國(guó)期刊全文數(shù)據(jù)庫(kù)(CJFD)
級(jí)別:統(tǒng)計(jì)源期刊
榮譽(yù):國(guó)家優(yōu)秀期刊
級(jí)別:省級(jí)期刊
榮譽(yù):中國(guó)優(yōu)秀期刊遴選數(shù)據(jù)庫(kù)
級(jí)別:CSSCI南大期刊
榮譽(yù):中國(guó)優(yōu)秀期刊遴選數(shù)據(jù)庫(kù)
級(jí)別:省級(jí)期刊
榮譽(yù):中國(guó)優(yōu)秀期刊遴選數(shù)據(jù)庫(kù)