公務員期刊網 精選范文 驅動程序設計范文

驅動程序設計精選(九篇)

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

驅動程序設計

第1篇:驅動程序設計范文

關鍵詞:CPCI 422;驅動設計;模塊互換;IVI規(guī)范

中圖分類號:TP311.11

0 引 言

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

1 IVI驅動程序的結構

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

[HT5”K][JZ]圖1 IVI體系結構[HT5]

目前,國內外只有NI公司,比較系統(tǒng)地提出了實現(xiàn)儀器互換的體系結構。該公司已經實現(xiàn)了8類儀器的IVI驅動開發(fā),而且也提供一個名為“MAX”的IVI配置程序,用于配置儀器無關測試系統(tǒng)。同時也提供了一個專用驅動庫開發(fā)向導,用以開發(fā)專用驅動\[4\]。但該向導不能對已有驅動程序進行升級和IVI標準封裝,NI公司也沒有提供類驅動庫的開發(fā)向導,加上類驅動庫數量的局限性,導致部分模塊無法用NI公司提供的開發(fā)向導進行IVI驅動設計,比如文中所涉及的CPCI 422基于IVI標準的驅動開發(fā)\[5\]。

2 CPCI 422驅動開發(fā)

在此,以自研CPCI 422模塊為例,介紹422驅動程序開發(fā)過程。CPCI 422模塊具有CPCI總線接口,能通過422總線發(fā)送數據,并且能接收被測設備通過422總線傳來的數據,并把數據傳送給上位機進行處理。該模塊具有8個通道,每個通道均能實現(xiàn)接收或者發(fā)送功能,通道能夠單獨工作也可一起工作,并且能對數據傳輸參數進行設置。

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

基于IVI標準的驅動程序配置引擎是整個IVI體系中的核心支柱。其主要功能就是實現(xiàn)類驅動庫到專用驅動庫的映射,使應用程序在調用類驅動庫時能自動加載相應配置的專用驅動庫。

該設計中,IVI配置引擎設計的主要思路是通過讀取配置信息文件,由配置文件中所設置的模塊邏輯名找到對應的專用驅動庫信息字段。此字段主要包括專用驅動庫路徑文件名、專用驅動庫函數前綴等,然后通過這些一一對應的映射關系,自動加載專用驅動庫。其工作流程如圖2所示。

該設計運用函數ivi422Class_SpecificDriver實現(xiàn)自動加載功能。下面為具體的函數設計:

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

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

1Init打開并初始化儀器

2Close關閉儀器

3SerialRead開始接收數據

4SetClock設置每個通道波特率模式

5SetUART通道工作參數設置

6SetDivisor通道具體波特率設置

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

8SerialWriteData開始發(fā)送數據

9SpecificDriver動態(tài)加載專用驅動庫[HJ0][HJ][HT5SS]

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

該函數的功能是提供儀器初始化函數接口,其中返回值定義為ViStatus型,具體表示形式,參照IVI標準,如IVI_SUCCESS。參數為ViSession型指針,用來返回儀器資源句柄。

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

該函數的核心部分就是調用GetProcAddress(hDLL,FuncName)函數,獲取專用驅動庫函數對應函數地址。其中,hDLL為在配置引擎功能中調用ivi422Class_SpecificDriver()函數獲取的專用驅動庫句柄,FuncName為對應函數名稱。

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

函數則具體針對儀器操作,完成模塊初始化功能。

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

[BT3]2.3 CPCI 422模塊IVI驅動程序中配置文件編輯

對于IVI 配置信息文件,可以通過專門的IVI配置實用軟件(如NI公司提供的MAX)進行編輯。在該設計中,利用圖形化編程軟件自己設計以對話框為基礎的配置實用程序,通過此程序對配置文件進行編輯。圖3為此程序的主界面。

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

2.4 應用程序調用驅動工作流程

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

第2篇:驅動程序設計范文

通信卡的硬件設計

1 通信卡的主要特點

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

2 通信卡的電路設計

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

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

3 通信流程設計

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

如果需要接收數據,啟動接收通道。接收通路自動搜索輸入信號,搜索到數據幀時,由卡上DMA控制器來管理,將接收的數據放人本卡SRAM中,并向CPU請求中斷,讀出數據。

4 總線競爭設計

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

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

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

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

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

通信卡的驅動程序設計

1 設備驅動程序的I/O模型

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

2 發(fā)送數據I/O例程設計

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

①立即方式:立即返回一個錯誤,當前設備忙,不能發(fā)送。

②阻塞方式:I/O管理器程序會調度相應的異步處理例程,將當前的發(fā)送任務放進任務隊列中,返回一個標志:I/O掛起,當前設備忙,發(fā)送任務提交任務隊列。驅動程序會在發(fā)送器空閑時,提交任務隊列中的發(fā)送任務給發(fā)送器。完成發(fā)送任務后,將相關文件句柄設為有信號狀態(tài),通知本次發(fā)送任務完成。

3 接收數據I/O例程

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

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

硬件層與接收線程之間通信的同步是通過同步事件對象來實現(xiàn)的。同步事件對象通常處于無信號狀態(tài),只有當成功地接收到一幀時,才將該事件置為有信號狀態(tài)。接收線長久等待同步事件對象,在沒有收到數據時,因同步事件對象處于無信號狀態(tài)而阻塞。當硬件檢測到數據時,實時中斷服務程序負責將同步事件對象置為有信號狀態(tài),接收線程就會釋放阻塞。將通信卡SRAM上的接收數據讀進接收線程緩沖區(qū)隊列,然后將同步事件對象置為無信號狀態(tài),接收線程再次阻塞,等待接收下一幀數據。

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

當用戶提交接收任務時,由驅動程序的調度程序讀取接收線程的緩沖區(qū)隊列,并將標志置為“空”,同時將緩沖隊列事件置為無信號狀態(tài),并返回,如果緩沖區(qū)是空,則

?立即方式:立即返回無數據。

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

4 硬中斷服務程序設計

通信卡在全雙工的通信中具有實時性,而且在較高的波特率,硬中斷非常多。為了防止高優(yōu)先級中斷過多地搶占CPU時間,設計中采用了實時中斷服務程序和延遲過程調用的方法。

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

5 驅動程序人口例程

Windows XP為每個核心態(tài)的驅動程序提供了一個默認的標準入口點DriverEntry()。設計中,考慮到該例程運行于PASSIVE_LEVE級,系統(tǒng)只運行該例程一次就拋棄了,所以在驅動程序中用到的重要數據、對象等都不能保存在DriverEntry()例程中,必須在初始化過程中分配一塊NoPaged內存來保存。通信卡的驅動程序的DriverEntry()例程主要完成如下功能。

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

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

6 設計驅動程序中需要注意的問題

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

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

第3篇:驅動程序設計范文

關鍵詞:嵌入式;CF卡;低層驅動;存儲設備

中圖分類號:TB文獻標識碼:A 文章編號:1672-3198(2012)12-0162-01

0 引言

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

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

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

1 系統(tǒng)設計

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

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

(1)啟動系統(tǒng),將設備登記到相應的設備數組,并返回設備的主驅動號。利用設備號對此數組進行索引。調用設備注冊函數module_register_chrdev()進行設備注冊。

(2)為驅動函數定義功能函數,當系統(tǒng)調用這些功能函數時,系統(tǒng)將自動運行函數定的模塊實現(xiàn)特有的功能。

(3)當一個模塊使用完成時,啟動動態(tài)的卸載模塊函數,調用cleanup_module()函數,并調用設備注銷函數即可卸載函數。

在進行設計時,需注意Linux設備驅動程序接口和幾個重要的數據結構。具體有以下四層接口:應用進程與內核、內核與文件、文件系統(tǒng)與設備驅動程序、設備驅動程序與硬件設備。

每個驅動程序都有一個數據結構,包含的函數指針指向所開發(fā)的接口,內核用主設備號作為索引訪問數據結構。

2 接口和重要的數據結構

設備驅動程序是操作系統(tǒng)硬件設備和內核的接口,Linux 操作系統(tǒng)中,Linux 操作系統(tǒng)采用統(tǒng)一的接口,在硬件設備、設備驅動程序、文件系統(tǒng)、內核、應用程序進程間有相連的接口。

驅動程序有一個file_operations的數據結構,該數據結構提供了很多接口,其中常用的接口有open、read、write、seek、release等,為驅動程序開發(fā)提供了保障。驅動程序中struct inode數據結構為設備和文件對應了唯一的inode號,驅動程序中同時也使用了struct file、struct device 數據結構。

3 CF卡基本配置

CF卡在存儲操作前,對CF卡進行的相關配置主要有以下幾個方面:配置GPIO并分配尋址端口,用于傳輸CF卡信號。配置CF卡的屬性存儲空間和尋址訪問方式。在系統(tǒng)中CF卡使用Memory尋址訪問方式,將屬性寄存器配置為0x00,其他屬性寄存器保持默認值。驗證對屬性寄存器的值,當驅動屬性值與默認值不匹配時,則說明Memory尋址訪問方式沒有正確使用CF卡,此時需修改屬性值為默認值即可。

4 CF卡驅動程序設計

4.1 底層驅動實現(xiàn)

CF卡存儲備份需要通過CF卡的底層驅動實現(xiàn),這就要求CF卡能準確的接收及響應系統(tǒng)對它的I/0請求。具體流程如下:

(1)在讀寫命令時,使用LBA尋址模式來訪問CF卡。當驅動對CF卡的I/O請求進行正確接收后,此時把相關參數值和ATA命令值寫入對應的寄存器,并向CF卡ATA命令,即完成了ATA命令。

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

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

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

4.2 驅動程序實現(xiàn)

驅動程序的作用在于為應用程序提供機制,它是內核的一部分。該驅動程序實現(xiàn)了設備初始化,在內核和設備間相互傳送數據,讀取、回送數據,檢測錯誤等功能,開發(fā)的難點在于高效請求處理、中斷、1/O操作等方面功能設計。

5 結語

本文通過系統(tǒng)驅動程序的設計流程分析,研究程序開發(fā)的接口和數據結構,對CF卡進行配置,研究開發(fā)驅動程序,實現(xiàn)了CF卡存儲備份和快速熱插拔,使其便于在其他系統(tǒng)中應用。

參考文獻

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

第4篇:驅動程序設計范文

windows nt是一個功能全面的操作系統(tǒng),具有完全集成式的連網能力,它的網絡模型開始于mac子層,網絡接口卡(network interface card以后簡稱網卡或nic)驅動程序駐留在其中。通過相關的網卡把windows nt與網絡連接起來,但一直到80年代后期,許多傳輸協(xié)議的實現(xiàn)受限于mac層接口的獨特實現(xiàn),因為mac層定義了協(xié)議與網卡之間的轉換機制。

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

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

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

第一章windows nt環(huán)境下fddi網卡驅動程序

總體結構介紹

第一節(jié)windows nt網絡結構

§1.1.1 windows nt網絡體系結構

windows nt的網絡體系結構是基于國際標準化(iso)制定的標準模型──開放式系統(tǒng)互連(open system interconnection:osi)參考模型分層建立的,這種方式有利于隨時擴展其它功能和服務。

windows nt網絡模型開始于mac子層,網卡驅動程序就駐留在其中。它通過相關的網卡把windows nt與網絡連接起來,圖中的多個網卡表明在一臺運行windows nt的計算機上能使用多種網卡。

這一網絡體系結構包括兩個重要接口──ndis接口與傳輸驅動

程序接口(tdi)。這兩個接口把兩個層隔離開來,辦法是相鄰的部件只允許按單一的標準來寫,不允許多重標準。例如一個網卡驅動程序(在ndis接口的下面)就不需要特地按每個傳輸協(xié)議來寫它的代碼塊,恰恰相反,該驅動程序是寫給ndis接口的,它通過符合ndis的相應傳輸協(xié)議來請求服務。這些接口包含在windows nt的網絡體系結構中,以容納可移植、可互換的模塊。

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

tdi之上是轉發(fā)程序,它把本地的網絡資源申請轉送給網絡。

為了能和其他廠商的網絡互連,windows nt允許有多個轉發(fā)程序。對于每一個轉發(fā)程序windows nt計算機必須也有一個相應的供應者(provider)(由網絡廠商提供)。多供應者路由選擇程序決定適當的供應者,然后借助于供應者,對應用請求到相應的轉發(fā)程序做出選擇。

§1.1.2 windows nt網絡驅動程序

windows nt支持兩種類型的網絡驅動程序

傳輸驅動程序

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

網卡驅動程序

實現(xiàn)對物理層的管理和數據鏈路層中介質訪問控制子層協(xié)議,通過ndis向下管理物理網卡,向上與傳輸驅動程序通信。

§1.1.3 windows nt網卡驅動程序

windows nt環(huán)境下的網卡驅動程序也分為兩種:

miniport網卡驅動程序:miniport驅動程序只須實現(xiàn)與網絡硬件相關的操作(包括發(fā)送和接收)。而所有底層網卡驅動程序的通用操作(如同步),一般由ndis接口程序來實現(xiàn)。

full網卡驅動程序:full網卡驅動程序必須實現(xiàn)所有硬件相關和同步、排隊等操作。例如full網卡驅動程序為了響應數據接收,需要保持本身的捆綁信息,而miniport就可以由ndis接口庫來實現(xiàn)。

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

而miniport網卡驅動程序允許開發(fā)者僅僅寫一些與網絡硬件相關的代碼即可,而那些通用的函數由ndis接口庫來實現(xiàn),這樣開發(fā)出來的驅動程序減少了不必要的工作。

第二節(jié)miniport驅動程序的結構

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

圖2.0 ndis約束下的網卡驅動程序、tdi驅動程序和系統(tǒng)的關系

miniport驅動程序包括驅動程序對象、驅動程序源代碼和ndis接口庫代碼。windows nt ddk提供ndis.h作為miniport驅動程序的主要頭文件,定義了miniport驅動程序的入口點、ndis接口庫函數和通用數據結構。

上邊緣函數的作用是網卡驅動與ndis接口庫進行通信,而下邊緣函數是tdi協(xié)議驅動程序與ndis通信的手段。

§1.2.1 miniport網卡對象

ndis用一個叫做邏輯網卡的軟件對象來描述系統(tǒng)中的每塊網卡,而邏輯網卡與windows nt設備對象的通信由i/o子系統(tǒng)來管理,描述網卡的設備對象包括相關的網絡信息如名字、網絡地址和網卡內存基地址等,它還包含與硬件相關的驅動程序狀態(tài)數據(捆綁數目,捆綁句柄,包過濾數據庫等)。ndis分配一個句柄到miniportinitialize這個上邊緣函數的一個結構中,然后miniport網卡驅動程序將在以后提供這個句柄來給ndis調用,這個結構一直被ndis保持,并且對miniport驅動程序不透明。

當miniport網卡驅動程序初始化一塊網卡時,它創(chuàng)立自己的內部數據結構來描述網卡,記錄需要它管理的與設備相關的狀態(tài)信息。當miniport網卡驅動程序調用ndismsetatttibutes或ndismsetattributesex兩ndis庫函數時,它傳遞一個句柄給這數據結構。這樣,當調用miniport驅動程序入口點時,它就傳遞這個句柄來驗證驅動程序所對應的網卡的正確性。這個數據結構為miniport網卡驅動程序所擁有并維護。

§1.2.2網絡對象標識符

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

§1.2.3 miniport網卡驅動程序代碼

典型的miniport nic驅動程序必須有一些函數來通過ndis接口實現(xiàn)上層驅動程序與硬件的通信。這些函數稱為上邊緣服務函數。

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

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

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

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

miniportsetinformation:ndis接口或協(xié)議驅動程序通過調用此接口改變驅動程序維護的oid庫,一些操作參數的改變也將同時改變驅動程序狀態(tài),例如組地址的設置。

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

miniporthalt:掛起網卡并釋放該網卡驅動程序占用的所有資源,在此期間不屏蔽中斷。

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

ndis接口調用miniportinitialize和miniporthalt兩函數時。

.中斷處理類型設為每此中斷處理過程都調用時。

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

miniporthandleinterrupt:由中斷延時處理程序在中斷延時處理時進行調用。ndis排隊所有的延時處理,該服務主要處理發(fā)送完成、報文接收、描述符用盡、溢出、網卡異常等中斷。

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

miniporttransferdata:多個已和網卡捆綁的協(xié)議驅動程序在接收到報文到達指示后,向網卡驅動程序發(fā)出傳送請求以拷貝各自所需的報文數據部分,網卡驅動程序根據各協(xié)議驅動程序對單個packet是否進行多次拷貝,以決定是否暫存只允許單次拷貝的packet等。

miniportcheckhandle:ndis每秒調用此服務函數一次,驅動程序發(fā)現(xiàn)網卡異常時報告給ndis由ndis調用miniportreset進行硬件重恢復。

miniportenableintrrupt:中斷使能。

miniportdisableinterrupt:中斷屏蔽。

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

§1.2.4 ndis接口庫

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

第二章fddi網卡驅動程序的加載和運行

第一節(jié) 網卡驅動程序的安裝

windows nt網卡驅動程序安裝的目的是實現(xiàn)網卡相應硬件信息和驅動程序在windows nt注冊庫中的注冊,使windows nt能夠正確識別網卡,了解所必需的軟硬件信息并能在windows nt啟動時加載相應驅動程序。

網卡驅動程序安裝時,首先在主群組的控制面板中選擇“網絡”,然后添加網卡,指定相應信息文件──oemsetup.inf的路徑,以完成以下兩個必要的操作:

復制驅動程序到相應的系統(tǒng)目錄(windows nt根目錄\system32\drivers\)中;

在windows nt注冊庫中存入相應軟硬件信息。

下面主要以fddi網卡為例介紹安裝驅動程序所必需的工作:

§2.1.1網卡一般硬件參數

對于fddi網卡,必須在編寫其oemsetup.inf文件時確定以下硬件參數:

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

廠商代號:0x5588……系統(tǒng)加載時確定網卡的標記,也是編程時確定pci槽號的標識;

cfid: 0x01;

介質類型:光纖(3) ……括號中的數字表示光纖在ndis中的介質類型代碼;

是否支持全雙工:支持。

對于其它的硬件信息在此inf配置信息文件中可有可無,如若配置,則可在驅動程序的編寫時利用這些信息,方便編程,同時有利于其它應用對其參數的確定和使用。

§2.1.2 fddi網卡加載時需在注冊庫登錄表里做的網絡配置

網卡驅動程序的安裝通常將創(chuàng)建登錄表中的四個不同子鍵:

software registrion鍵,對應于驅動程序,存在于hkey_local_machine\software\company\ productname\version中。我們的fddi網卡驅動程序所對應的是hkey_local_machine\software\net612\yhfddi\yhfddi1.0;

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

驅動程序的服務登錄鍵,存在于hkey_local_machine\system\currentcontrolset\services

網卡的服務登錄鍵,存在于hkey_local_machine\system\currentcontrolset\services

對于每一個網絡部件,一個名為netrules的特殊子鍵在鄰近的驅動程序或網卡登錄子鍵里創(chuàng)建,netrules標識網絡部件為網絡整體的一部分。

fddi網卡驅動程序對應的標準軟件登錄表項將出現(xiàn)在以下路徑:

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

驅動程序對應的標準項的值為:

description =yhfddi/pci adapter controller

install date =……

……

refcount =0x01

servicename =yhfddi

softwaretype =driver

title =yhfddi/pci adapter controller

而且在yhfddi驅動程序相關的netrules子鍵下,這些值項為:

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網卡在如下路徑的networkcards子鍵里介紹:

hkey_local_machine\software\microsoft\

windows nt\nt3.51\networkcards\yhfddi1;

網卡的標準項包括以下這些值:

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

nt網卡配置文件有其一套規(guī)范,驅動程序開發(fā)者必須按規(guī)范編寫配置文件,一般來說,一個配置文件至少應該提供下面三個節(jié):

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

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

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

第二節(jié) 驅動程序的加載過程

§2.2.1 windows nt的啟動過程

第5篇:驅動程序設計范文

關鍵詞:WDMDriver;Windows;例程;DLL

中圖分類號:TP316文獻標識碼:A文章編號: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

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

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

1 WDM系統(tǒng)函數

WDM 驅動程序包含了許多子例程,操作系統(tǒng)通過調用相關例程來執(zhí)行針對I/O 請求包的各種操作[1]。WDM 驅動程序可執(zhí)行包中的內容如下:

1.1 基本驅動程序與設備操作

DrvierEntry、 AddDevice

① DriverEntry例程負責初始化程序范圍的數據結構和資源。

② AddDevice例程是被系統(tǒng)調用,進行初始化一個被枚舉的新設備。

1.2 I/O 控制

DpcForIsr、OnInterrupt、StartIo、AdapterControl

① StartIo例程進行串行處理,對IRP進行排隊。

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

③ OnInterrupt是一個中斷服務例程。

④ DPC是一個延遲過程調用例程。

1.3 派發(fā)功能函數

DispatchWriter、DispatchRead、DispatchWmi、DispatchPnp DispatchPower

Dispatch為調度例程,負責處理應用程序與驅動程序之間的通信,包括Writer,Read等,開發(fā)人員必須選擇特定驅動中需要的例程。

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

1) 內核模式驅動程序沒有main或WinMain,而是由I/O管理器根據需要調用一個驅動程序例程:① 驅動程序被裝入時;② 驅動程序被卸出或系統(tǒng)關閉時;③ 用戶程序發(fā)出I/O系統(tǒng)服務調用時;④ 共享硬件資源對驅動程序可用時;⑤ 設備操作過程中的任何時候。

2) 相關內容:① 所有驅動程序必須包含DriverEntry例程,進行驅動程序初始化。② 利用AddDevice函數負責創(chuàng)建一個設備對象,并建立一個私有的設備擴展對象。③ 給出設備名并創(chuàng)建符號連接名或者注冊設備接口。④ 初始化設備擴展和設備對象的標志位。⑤ 把新設備對象附著到設備堆棧中。

2 硬件的訪問及資源分配

PnP管理器使用IRP來指導驅動程序啟動、停止和刪除設備,并查詢驅動程序的設備,WDM是PnP驅動程序,必須具備PnP例程。IRP是DDK定義的一個數據結構。當驅動程序接收到PnP子碼IRP_MN_START_DEVICE 時,IRP堆棧列表內的兩個字段AllocatedResourcesTranslated 和AllocatedResources,列出分配的資源。

用來描述這些資源的結構是CM_PARTIAL_RESOURCE_LIST 類型,它包括一個CM_PARTIAL_RESOURCE_DESCRIPTOR 結構的計數數組。

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

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

3 動態(tài)鏈接庫(.dll)

雖然驅動程序是為設備硬件層編程服務的,但同樣需要和應用程序進行通信,從而最終達到應用程序控制設備的目的。

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

4 結束語

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

參考文獻:

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

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

[3] 李建.Windows2000下I/O設備驅動程序設計[D].北京:北方交通大學,2003.

第6篇:驅動程序設計范文

0、引言

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

1、項目驅動教學的理論基礎與認知研究

1.1 目前課程教學中存在的問題

面向對象程序設計(OOP)是一種全新的程序設計思想。但目前該課程大都以演繹的方式來教授,教學中存在重語言介紹、輕對象思想和方法傳授的情況,即在教學內容的組織上是以特定的面向對象程序設計語言結構組織的,從基本語言要素、語法和語句結構組織,然后再舉一些例子說明這些語句的應用,而這些例子都是一些語言語法層面上的簡單應用,很少涉及實際問題的解決。這種教學方式不僅不利于學生領會和理解面向對象的思想和方法,更不利于培養(yǎng)學生使用面向對象方法解決實際問題能力。

1.2 建構主義

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

在教育心理學中有一個公認的準則,就是只有當人們清楚地意識到有必要去了解某個事物時,他才會最為強烈地去主動學習。如果只是告訴學生某項知識或技能在日后會用得到,并不能起到有效的激勵作用。

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

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

1.3 認知研究

心理學與神經學方面的研究對歸納式的項目驅動教學提供了強有力的支持。

布蘭斯福德(Bmnsf-ord)等人在文獻中指出:“凡是新的學習都涉及先前學習所得信息的轉移”,即學生對新知識的接受程度受已有知識的影響是很強的。如果新知識與學生已有知識或認知有聯(lián)系或一致的話,學生學習起來較容易。項目驅動教學是在學生能聯(lián)系起來的情景、問題或應用的背景下提出新的知識。因此,這樣的教學內容能夠與學生已有的認知結構結合起來,是有易于學生接受的。

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

此外,如果教學環(huán)境與實際工作環(huán)境相似,學生在日后就能夠很容易地將課程所學得的知識與技能移用到實際工作場景中。項目驅動的教學圍繞真實的項目來組織教學,因此有助于彌補學生的學習環(huán)境與實際工作環(huán)境兩者之間的不一致,從而有利于學生將所學的東西應用到實際工作中去。

綜上所述,把項目驅動教學應用于“面向對象程序設計”課程的教學中,能夠激發(fā)學生的學習興趣,有效地提高學生學習的積極性和主動性,改善教學效果,并有利于學生的職業(yè)素質和能力的培養(yǎng)。

2、項目驅動教學的應用

課程組將項目驅動的教學模式應用于“面向對象程序設計”課程的教學過程中,教學以項目為核心,學生為主體。教師在教學中起主導作用,將軟件工程化思想融入到教學內容中,以軟件產品的生產周期作為課程內容的主框架,教學內容包括若干個不同層次的軟件項目,通過項目引出知識點。項目驅動教學模式在課程教學中的應用激發(fā)學生動手實踐和分析思考,提高了學生的綜合應用能力。

下面從教學內容、教學方法和手段、教學組織和教學評價等方面介紹將項目驅動教學應用于“面向對象程序設計”課程改革的具體做法。

2.1 基于項目驅動的教學內容改革

課程組通過選用國外原版經典教材,引進國外的先進教學理念,依據課程教學大綱,以職業(yè)活動為導向,以學生為教學主體,以項目為中心,對課程教學內容進行整合、序化,構建了模塊化課程結構,如圖1所示。該結構將課程內容劃分為4個模塊:語言基礎、面向對象程序設計基礎、面向對象程序設計的方法理論和開發(fā)應用,并細化每個模塊的知識點和職業(yè)素質、技能和能力培養(yǎng)的要求,突出面向對象程序設計的方法理論和開發(fā)應用,著重培養(yǎng)學生的職業(yè)素養(yǎng)、主動學習和創(chuàng)新的能力。

在上述4個教學模塊中,教學內容是按項目驅動的。在講授課程內容時直接從面向對象程序設計入手,將語言基礎的知識分散到其他模塊中進行講解。在2、3、4級模塊中,通過項目來詳細展示每個單元的重要理論和概念,所涉及的語法知識會隨著解決問題的需要而引入?;陧椖框寗咏虒W的2、3、4級模塊所包含的項目如圖2所示。

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

2.2 基于項目驅動的教學方法改革

根據軟件設計開發(fā)的工程性特點,“面向對象程序設計”課程的教學靈活地運用了“基于項目的教學方法”,突出了“理論教學構筑學生的知識結構,實踐教學構筑學生的職業(yè)技能結構”的教學原則,并將面向對象程序設計的基本原理、軟件編程的基本規(guī)范和軟件設計建模的教學完全地融合在一起。

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

2.3 教學評價和考核方法改革

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

3、項目驅動在教學中的應用效果與評價

從2009~2010學年的第一學期開始,課程組將項目驅動應用于“面向對象程序設計”的課程教學中。通過與傳統(tǒng)教學進行對比,我們得出以下兩方面的結論。

3.1 項目驅動對教學產生的正面效果

項目驅動教學增進了學生在概念理解方面的思維能力,增強了學生分析問題、解決問題的能力,能夠有效地調動學生學習的積極性,提高學習的責任心,改善了學生與學生、教師與學生之間的互動關系,在學生的團隊合作與溝通能力培養(yǎng)方面起到積極的作用,特別是對于那些學習風格不適于傳統(tǒng)課堂授課的學生的教學效果特別好。

3.2 項目驅動教學在應用中存在的問題

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

第7篇:驅動程序設計范文

關鍵詞:C#程序設計;任務驅動;工作過程;共享資源;課程開發(fā)

1 引言

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

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

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

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

整體化的工作分析的結果不是獨立的、點狀的“能力點”或者“技能點”,而是過程完整的“典型工作任務”。

2.2 在典型工作任務的基礎上設計學習領域課程及其學習任務

學習情境的載體是一個“學習與工作任務”,即“內容是工作的學習任務”,“用于學習的工作任務”,簡稱“學習任務”或“學習性任務”。

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

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

課程內容的安排要以學習任務為中心來開展,并適當地把多個學習任務聯(lián)結成一個工程項目。在每一個學習領域課程中,都采用一個實際的開發(fā)項目來組織技術內容,課上老師會通過項目的講解來引出技術內容,而上機課要求同學自己逐步完成一個類似的項目。

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

2.3 課程學習任務舉例

課程體系中典型工作任務之一:開發(fā)三層結構數據庫應用程序。

學習任務1:用三層結構實現(xiàn)不同類型用戶登錄考試管理系統(tǒng)(應用面向對象實現(xiàn)三層結構數據庫應用程序的開發(fā))。

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

子任務2:完成學員窗體的登錄。

首先教師指導學生實現(xiàn)管理員窗體的登錄過程,項目在三層結構的基礎上具體實現(xiàn)步驟如下:

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

關鍵技術:使用實體類消除關系數據與類之間的差別,通過將關系數據封裝成實體對象,用實體對象實現(xiàn)三層結構中數據傳遞的載體。見圖1。

運行完成的應用系統(tǒng),首先進入系統(tǒng)登錄窗體。見圖2。

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

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

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

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

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

2.4 基于“共享型教學資源”的教學模式

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

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

基于“共享型教學資源”的高職教學平臺強調在線學習,重視發(fā)揮學生的主體作用,指導學生利用教學平臺自主探究,引導學生進行發(fā)現(xiàn)學習。

教師利用平臺整合教學資源,提出學習任務,引導學生學習新知識。運用自主學習與協(xié)作學習相結合的方式進行探究式學習,對任務進行交流與討論,通過協(xié)作完成并在線提交任務。教師和企業(yè)專家給出任務評價標準,并做為課程考核的重要評價指標之一。

3 總結

浙江省教育廳廳長劉希平說:“我們應該高度重視課程開發(fā),尤其是二次開發(fā)。我們應該鼓勵和要求教師在教學過程中進行二次開發(fā),即對已有的課程,教師應根據自己的理解、研究,針對學生的實際,進行一些教學創(chuàng)新。教師只有對教材有獨特的理解、系統(tǒng)的分析,才能夠把課教得生動,教得有針對性。”

本門課程的教學團隊經過幾年的教學實踐,針對學生的實際,對課程進行了二次開發(fā),將一個大的項目分解成幾個小的學習任務,再分解成幾個子任務,明確提出任務的需求和目標,給學生持續(xù)的動力、興趣和成就感。

在項目實施過程中,根據需要進行分組,以組為單位完成任務,學生的收獲既有交流中的炫耀引發(fā)的自豪感,又有互通有無、相互學習、相互補充中對知識的逐步完善。通過項目教學能夠更好地促進學生實踐能力和綜合素質的提高。

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

參考文獻

[1]北京阿博泰克北大青鳥信息技術有限公司.在.NET框架下開發(fā)三層結構數據庫應用系統(tǒng)[M].北京:科學技術文獻出版社,2008.

第8篇:驅動程序設計范文

[關鍵詞]項目驅動 實踐應用 教學改革

[作者簡介]湯海蓉(1974-),女,湖南常德人,湖南文理學院計算機學院,講師,碩士,主要研究方向為數據庫、計算機教育。(湖南 常德 415000)李錫輝(1974-),女,湖南望城人,湖南信息職業(yè)技術學院,副教授,碩士,主要研究方向為WEB應用開發(fā),視頻圖像處理。(湖南 長沙 410200)

[中圖分類號]G642 [文獻標識碼]A [文章編號]1004-3985(2012)06-0140-03

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

一、JAVA語言目前教學中存在的問題

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

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

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

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

4 考核標準單一。傳統(tǒng)教學對學生的考核是通過筆試完成的,掌握了教師所交給的課本知識,通過記憶,考試就能夠取得好成績,學校對教師的評價也基本上是看教學成績,使部分學生產生了只要背背知識點通過考試就行、實踐無所謂的錯誤傾向。這種重結果而不重過程。重考試成績而不重全面發(fā)展的考核方式,不能充分地發(fā)揮出考核作為指導教學、檢驗學生學習能力的指揮棒作用。

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

二、基于項目驅動的教學法

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

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

三、具體操作

經過實踐總結,筆者將項目驅動教學的過程劃分成以下幾個步驟,具體如圖1所示:

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

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

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

4 過程指導。在項目進行過程中,主要依靠學生自身的能力和團隊的協(xié)作,通過查閱資料及網絡自主學習,以團隊為單位

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

5 綜合評估。學期結束,需要對完成的較完整的項目進行檢查與評價。首先應由學生對自己的工作進行評定,闡述包括在項目準備、具體設計、測試過程中碰到的各種疑難問題、解決的手法以及結果如何,總結團隊合作的感受,并對本組負責的模塊的運行效果加以點評。教師最后進行工作總結,總結團隊中各成員在設計過程中的分工和職能的完成情況,依據各組負責模塊的難易程度、總體完成情況、個人對團隊的貢獻等因素進行綜合評判,給出學生的實踐能力成績,找出差距與改正方法,并最終納入到課程考核成績中。最后,還應指導學生分組撰寫實踐報告。

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

四、項目教學中應注意的問題

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

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

3 項目教學對教師和學生都提出了更新、更多的要求。教師必須具備完成一個項目所需的全部理論知識和專業(yè)技能,尋找到一個能覆蓋學生學習領域所涉及的全部或絕大多數內容的合適項目,必須充分收集、熟悉、掌握相關資料。并從中歸納要點,提供分析、討論的框架,必須做大量的準備工作以應對學生可能提出的各種問題,還要求教師具有很強的調控能力。從學生方面來看,再不能像以前那樣被動地接受“滿堂灌”,而必須充分發(fā)揮自己的主動性,查閱大量參考資料。提前預習,發(fā)現(xiàn)問題,與他人合作,開展調查研究,提出解決問題的對策,運用適當的方法和手段,表達、交流、反思自己學習和設計的見解及成果。

第9篇:驅動程序設計范文

關鍵詞:實例操作;可視化程序設計;教學研究

中圖分類號:G642.0 文獻標識碼:A 文章編號:1007-0079(2014)11-0163-02

可視化程序設計是學習可視化程序設計基本理論和原理的實踐性、綜合性、應用性很強的課程。在計算機、信息等相關專業(yè)的教學體系中,實際上存在相當多的可視化程序設計類課程,如:C#、Visual Basic、Delphi等等。這些可視化程序設計課程的宗旨是使學生了解現(xiàn)代程序設計理論中的面向對象編程和可視化程序設計等的基本思想,培養(yǎng)學生應用程序設計技術來解決實際問題的能力。本文結合該課程性質與定位分析,針對該課程傳統(tǒng)教學中存在的問題,以強化實際動手操作能力培養(yǎng)為目標,探索實例操作驅動的教學方法在該課程教學中的應用。

一、課程定位與分析

教學方法是由課程性質及教學目標所決定的,無論采用什么教學方法都要緊緊圍繞課程性質和教學目標展開。在探討可視化程序設計的教學方法之前有必要對課程性質及教學目標進行分析。

1.課程性質與目標

可視化程序設計課程要求學生既要掌握理論知識,更要掌握操作技能并能在實際中應用??梢暬绦蛟O計課程集編程理論與操作實踐于一身,然而課程本身的抽象性與復雜性使學生無法完全理解并有效應用所學理論知識。只有在實踐中學生才能真正學會編寫和調試程序,從而更好地掌握程序設計的理論知識,提高利用理論知識解決實際問題的能力。

可視化程序設計類課程由于實踐性很強,所以其性質應該定位在實踐性課程、操作性課程。也就是說,課程歸根結底應該教會學生怎么做,讓學生愿動手、能動手、會動手來實際操作,強調實踐性,培養(yǎng)動手能力應該是第一位的。

2.實例教學

針對可視化程序設計的課程性質與目標,按照學生的認知規(guī)律組織教學,毫無疑問實例教學是一個理想選擇。實例教學法已經在多個學科的教學中應用,并收到了良好的效果。豐富的教學實例能夠提高學生的學習興趣,實例教學增強了課堂教學的靈活性和易懂性,極大地提高學生的學習興趣和主動性。實例教學有利于學生理論與實際的結合,有利于培養(yǎng)出實用型人才。在實例教學中,教師要本著理論與實際相結合的宗旨,遵循教學目的要求,以實例為基本素材,展開教學內容,培養(yǎng)學生分析和解決問題的能力,加深他們對可視化程序設計理論知識的理解。在實例教學中始終堅持以用為本,將語法、命令、控件等具體使用融于實例開發(fā)過程中。以學生的已有知識為基礎,按照學生的認知規(guī)律,遵循先易后難、先具體后抽象的原則,通過觀看、模仿、理解、總結、提高等階段進行教學。

3.實例與編程思想

可視化程序設計實例教學中有一個重要的階段就是學生模仿,也就是依葫蘆畫瓢,照葫蘆畫樣。毋庸置疑,編程思想對于程序開發(fā)人員至關重要,教師應該在程序設計課程中幫助學生形成和訓練良好的編程思想。巧婦難為無米之炊,學生只有在具備一定量的實例編程基礎之上,才能構建和形成編程思想,否則,沒有較多的實際操作體驗,編程思想的訓練只是空談。實例的模仿、學習與演練也有利于學生熟悉編程步驟、形成編程規(guī)范,然而編程步驟與規(guī)范并不等同于編程思想的僵化。實例教學能使學生從課堂和課后實例的反復練習中總結一般的算法,進而從算法升華為編程思想。

此外,編程思想的訓練是一個系統(tǒng)工程,從縱向維度來看,它貫穿于可視化程序設計課程所在的整個課程體系中??梢暬绦蛟O計課程的前置課程如C/C++程序設計側重程序設計基礎與語法,同時涉及算法與編程思想,后置或關聯(lián)課程如算法設計與分析等更是著重解決編程思想的問題,因而沒必要將編程思想的形成和訓練畢其功于一役,完全集中在可視化程序設計課程中,盡管這一點在該課程中必要而且十分重要。因為學生有了編程思想以后就可以遵循編程規(guī)范來指導自己的編程過程,能獨立完成編程任務了。

二、傳統(tǒng)的多媒體教學不足

教學過程是對教學思想和教學方法的具體體現(xiàn)。可視化編程語言教學基于面向對象的編程機制,它繼承了順序程序設計的思想,重點講述類、對象、控件的方法、事件與屬性,在教學中以多媒體教學為主,以體現(xiàn)可視化程序設計對控件等對象操作的特點,問題的關鍵在于如何借助多媒體實施可視化程序設計課堂教學。傳統(tǒng)的多媒體課堂教學方法包括以下三種:

方法一:課堂借助多媒體投影主要講授可視化編程理論知識,較少加入實例項目到課堂中??梢暬绦蛟O計實踐性非常強,并且可視化程序設計理論知識抽象性和復雜性強,缺少實例將很難保證課堂講授效果。

方法二:課下在課件中編寫實例代碼,課上利用多媒體投影展示代碼。教師課前將代碼放在幻燈片上,在課堂上將含有代碼的幻燈片打開,直接展示給學生,甚至教師還針對代碼做一些必要的講解。該方法無法直接運行程序,缺乏程序結果的可見性,并且學生也看不到項目或解決方案的詳細建立過程。

方法三:課下利用開發(fā)環(huán)境建立好實例,課上利用多媒體投影展示實例并演示。該方法相對方法二來講,可以直接運行出程序結果,增加了一定的趣味性和直觀性。缺點仍然在于學生看不到項目或解決方案是如何建立的。

以上的這些教學方法,學生需要自己琢磨詳細操作過程,其結果是不少學生因為實例操作步驟不清晰而花費了很長時間也沒能成功編程完成實例。多次這樣的經歷就使得這些學生對可視化程序設計失去了信心,自然也就對課程失去了興趣,這樣的現(xiàn)象在課程開始之初表現(xiàn)得尤為突出。

三、教學實施分析

試想,倘若人們在實際生活中需要學習一項之前從不會的技能或學做一件之前從不會做的事情,比如說學習汽車駕駛,最希望得到什么樣的指導?毫無疑問,絕大部分的人都希望有人能手把手地教他這項技能或教他做這件事情。同樣,經過調查,對于程序設計,尤其是可視化程序設計,幾乎所有學生希望得到的也是有教師能手把手地教他如何操作。由教師一對一實實在在手把手來教所有學生,在課堂教學甚至實驗教學中實際實施起來具有很大的難度,尤其是在學生人數較多的情況下。事實上,手把手的教學過程可以由展示實例詳細操作過程來近似替代。于是,實例的詳細操作過程的展示就成為基于實例的教學方法的至關重要的一環(huán)。

1.展示實例操作過程

如何展示實例的詳細操作過程?現(xiàn)場開發(fā)實例是一個直觀的選擇,這其中包括兩種做法。第一,現(xiàn)場利用開發(fā)環(huán)境建立實例及編寫代碼,利用多媒體投影展示。[1]該方法將完整建立過程展示給學生,但現(xiàn)場編寫代碼費時,講授課堂內容效率較低。第二,課下編寫實例代碼,現(xiàn)場利用開發(fā)環(huán)境建立實例,利用多媒體投影展示。該方法將完整建立過程展示給學生,并且期間直接粘貼課下已編寫好的代碼,相比第一點提高了課堂教學的效率。這兩種現(xiàn)場建立實例項目的方法在項目簡單、代碼量少的情況固然能取得一定效果,但畢竟即使是具有豐富開發(fā)經驗的教師,在課堂上現(xiàn)場開發(fā)實例也可能遇到意料之外的程序錯誤,甚至數次調試都無法成功解決。其直接結果就是一直卡在出錯處,課程無法繼續(xù)進行,浪費了大量的課堂時間,最嚴重的后果可能導致學生對教師失去信心。事實上,任何編程者都無法保證在遇到每個程序問題時都能迅速解決。

實例的詳細操作過程的動畫錄制與展示看似是對現(xiàn)場開發(fā)實例的一種互補,但它是相比現(xiàn)場開發(fā)實例更為可取的一種做法。教師課前進行實例操作過程的動畫錄制,準備課堂實例的動畫演示課件,演示課件主要包含實例的詳細操作全過程錄像,也可以加上必要的文字甚至語音解說。實例操作過程的錄制通??梢越柚聊讳浵耦惖能浖?,比如屏幕錄像專家、RoboDemo等來完成。學生可以下載這些演示課件并對實例進行模仿操練,這樣就使得教師實際編程的過程可以回放,課堂的實例教學得以延續(xù)。

2.實例的準備

實施實例教學前要進行充分的準備,實例教學的成敗與準備充分與否關系緊密,要有充足的準備時間,而且要認真思考學生的學習興趣點。要對學生的己有的知識水平和能力進行調查和了解分析,也就是要了解學生已有的計算機知識水平和對面向對象程序設計的了解程度,只有這樣才能在具體內容的講解和實例的選擇演示方面有所把握。

實例的選取是實例教學的關鍵環(huán)節(jié),由于實例教學是以實例展開的,實例選取的好壞直接影響到教學的效果及質量,所以要精心選編實例。實例選擇時要注意:[2]第一,實例要精。實例選取要有針對性、典型性和代表性,緊扣教學重點、難點、編程理論進行選編,這種實例的教學有助于達到舉一反三的效果。第二,實例要實。實例選取不僅要從學生的實際情況出發(fā),還要從實際生活出發(fā),既要體現(xiàn)教學目的和要求,也要反映實際生活的需求,更要能提高學生的學習興趣。實例的選取除了選擇教材上的典型實例外,可以由教師自己編制一些源自于實際項目的更為實際的例子。

3.課后及時操練

實例教學實施過程中,課后操練這一環(huán)節(jié)是非常重要的,它是讓學生理解掌握可視化程序設計理論、培養(yǎng)解決問題能力的主戰(zhàn)場。學生觀看了實例的詳細操作過程后,只有反復模仿、操練,才能理解、總結,并進行實例的拓展,獲得能力的提高。操練的實例一方面來源于課堂上講解的實例或教師錄制好的實例,另一方面來源于接近但超越這些實例的作業(yè),這些題材包含了對實例的分層次拓展與完善。此外,教師有必要設計良好的類游戲規(guī)則激發(fā)學生對于實例操練的興趣,自覺地去實施這一過程,這些規(guī)則比如有積分動態(tài)排行榜等。教師也可以借助自己創(chuàng)建的教學論壇解決學生在完成作業(yè)和學習過程中遇到的問題,并在論壇上開展關于可視化編程學習的討論,激發(fā)學生的學習興趣,培養(yǎng)學習氛圍。

四、總結

實例操作驅動的可視化程序設計教學方法強調實例教學,并且著重展示實例的詳細操作構建過程,目的在于教會學生怎么做,讓學生愿動手、能動手、會動手來實際操作。在這種教學方法中,學生可以獲知編程任務如何下手,也能成功地完成編程實例,給其可視化編程奠定良好的起步,極大激發(fā)了學生的學習興趣,提高了學生的學習主動性與積極性。在教學實施中教師本著實而精的原則準備好實例,包括花功夫精心選取、編制實例,認真細致地進行實例詳細操作過程的動畫錄制,給學生模仿操練、拓展提高打下良好的基礎,使課堂教學得以延續(xù)。學生課后針對實例和作業(yè)及時操練、鞏固所學,也就不僅能掌握可視化編程理論知識,還能扎實地培養(yǎng)動手能力,培養(yǎng)應用可視化編程解決實際問題的能力。實例操作驅動的可視化程序設計教學基于實例操作的詳細展示,突破課堂教學的時間與空間限制,融教、學和做為一體,提高了教學實效。

參考文獻: