伊人色婷婷综在合线亚洲,亚洲欧洲免费视频,亚洲午夜视频在线观看,最新国产成人盗摄精品视频,日韩激情视频在线观看,97公开免费视频,成人激情视频在线观看,成人免费淫片视频男直播,青草青草久热精品视频99

程序設(shè)計論文模板(10篇)

時間:2023-03-17 18:14:07

導(dǎo)言:作為寫作愛好者,不可錯過為您精心挑選的10篇程序設(shè)計論文,它們將為您的寫作提供全新的視角,我們衷心期待您的閱讀,并希望這些內(nèi)容能為您提供靈感和參考。

程序設(shè)計論文

篇1

隨著計算機應(yīng)用的普及,計算機應(yīng)用專業(yè)也成了熱門專業(yè),而高級程序設(shè)計語言是計算機專業(yè)的一門必修課。在高級程序設(shè)計語言中,VisualBasic語言以其易學(xué)易用和功能強大,而且能夠方便快捷地開發(fā)Windows應(yīng)用程序等特征,而深受使用者歡迎。因此,其也作為中等職業(yè)學(xué)校的高級程序設(shè)計課的首選。VB是一門集知識和技能于一體、實踐性很強的課程,要求學(xué)生既要學(xué)好理論知識,又要把握實際操作技能,同時,在進行軟件開發(fā)時,要對用戶需求及市場情況進行調(diào)研,再加上計算機軟、硬件快速更新?lián)Q代的特征,要求學(xué)生還要具有很強的自學(xué)能力和終身學(xué)習(xí)的思想。對于這些要求來說,傳統(tǒng)的教學(xué)方法難以做到。而使用強調(diào)以職業(yè)活動為導(dǎo)向,以人的發(fā)展為本位的“行為導(dǎo)向教學(xué)法”將會較好的實現(xiàn)這些教學(xué)要求。本文擬就在中等職業(yè)教育的計算機程序設(shè)計(VisualBasic)教學(xué)中,如何運用“行為導(dǎo)向教學(xué)法”進行初步探索。

一、行為導(dǎo)向教學(xué)法的基本理論

“行為導(dǎo)向教學(xué)法”是在近幾年從德國引進的現(xiàn)代的職業(yè)教育新模式,其目標層次是培養(yǎng)人的行為能力,方法層次是人的行為活動。即摘要:這種教育以行為為目標,教學(xué)以行為為導(dǎo)向,教學(xué)是學(xué)生積極參和的全面的教學(xué),學(xué)習(xí)過程是學(xué)生同時用腦、心、手來進行學(xué)習(xí)的過程。

行為導(dǎo)向教學(xué)法具有很強的針對性,即是以職業(yè)活動為導(dǎo)向,以教會學(xué)生“學(xué)會學(xué)習(xí)、學(xué)會工作”為目標而開展教學(xué)活動,因此,對學(xué)習(xí)者來說,學(xué)習(xí)目的是十分明確,即現(xiàn)在的學(xué)習(xí)是為今后的職業(yè)服務(wù)。教學(xué)活動的開展,通常是圍繞某一課題、新問題或項目開展,是以“學(xué)習(xí)任務(wù)”為載體,引導(dǎo)學(xué)生自主學(xué)習(xí)和探索的過程。整個教學(xué)過程為一個包括獲取信息、制訂計劃、做出決定、實施工作計劃、控制質(zhì)量、評定工作成績等環(huán)節(jié)在內(nèi)的完整的行為模式。使用“行為導(dǎo)向教學(xué)法”,將能更好的培養(yǎng)學(xué)生的關(guān)鍵能力(專業(yè)能力、方法能力、社會能力、個性能力),以達到職業(yè)教育的“職業(yè)教育就是就業(yè)教育”的教學(xué)目標。

二、行為導(dǎo)向教學(xué)法在VisualBasic教學(xué)中的必要性和可行性

(一)必要性

現(xiàn)行的計算機專業(yè)類教材大多和其它學(xué)科式的教材一樣,重視知識結(jié)構(gòu)的系統(tǒng)性,教學(xué)內(nèi)容大多以線性方式展開,適用于“循序漸進”的傳統(tǒng)教學(xué)模式,以《VisualBasic程序設(shè)計》的教材為例,從語言基礎(chǔ)、流程控制、過程和數(shù)組、窗體和控件、對話框設(shè)計、菜單、工具欄和狀態(tài)欄設(shè)計等等,分章編排,在每一章的內(nèi)容里,也同樣按線性方式展開。假如,在教學(xué)中仍按傳統(tǒng)的教學(xué)方法按章節(jié)講授,勢必降低的課程的綜合性、實用性,也缺乏趣味性,這不但難以培養(yǎng)學(xué)生學(xué)習(xí)喜好,使得教學(xué)雙方都陷入困境,而且,學(xué)生不知道如何在真實的情境中靈活地使用知識和運用技巧。這樣的學(xué)習(xí),是很難面對今后職業(yè)的。要改變這一現(xiàn)象的方法,比較成功的是運用以課題或項目來開展教學(xué)活動的行為導(dǎo)向教學(xué)法進行教學(xué),在教學(xué)中,淡化知識的系統(tǒng)性和連貫性,更多關(guān)注的是知識之間的聯(lián)系,在聯(lián)系中學(xué)習(xí)知識、在綜合運用中學(xué)習(xí)知識,使學(xué)生不僅學(xué)會了程序設(shè)計知識本身,又培養(yǎng)了學(xué)生運用程序設(shè)計的知識去解決實際新問題的能力,達到“學(xué)以致用”的教學(xué)目的。

(二)可行性

《VisualBasic程序設(shè)計》是一門實踐性和操作性很強的課程,知識涉及許多抽象的術(shù)語,如摘要:類、對象、過程、語句、控件等等,還有大量的開發(fā)工具的使用。僅就VB的開發(fā)環(huán)境為例,其中就包含了摘要:窗體設(shè)計器、代碼編輯器、對象瀏覽器、屬性窗口、工程管理器、工具箱、菜單、工具欄等等。把握和熟悉它們的最好方法,就是在不斷的結(jié)合實際的“案例”(案例教學(xué)法)或“課題”(項目教學(xué)法)的操作實踐中去把握。在教學(xué)中,教師可以把課程內(nèi)容包含在兩到三個綜合貼近實際的項目,給出案例,再把這個項目分成若干個小項目(或模塊)。例如摘要:以開發(fā)一個“學(xué)生信息管理系統(tǒng)”為一個綜合項目(教師首先給出案例演示,以引起同學(xué)們的關(guān)注),再分別以“登錄窗口”、“查詢窗口”等為小項目進行設(shè)計開發(fā),學(xué)習(xí)相關(guān)的基礎(chǔ)知識(如摘要:在設(shè)計“登錄窗口”的項目中,學(xué)生可以把握“文本框、標簽、命令按鈕、屬性設(shè)置、變量命名規(guī)則、變量定義、變量數(shù)據(jù)類型、變量的聲明語句、賦值語句”等相關(guān)知識群)。學(xué)生在具有目標明確的項目驅(qū)動下,以“做中學(xué)”的方法進行學(xué)習(xí),這樣,不僅可以提高他們學(xué)習(xí)的主動性和學(xué)習(xí)樂趣,同時也培養(yǎng)了他們的關(guān)鍵能力。

二、“行為導(dǎo)向教學(xué)法”案例

行為導(dǎo)向教學(xué)法中的“項目教學(xué)法”是指師生以團隊的形式共同實施一個完整“項目”的工作而進行的教學(xué)活動。通過在開展項目過程中有針對性的工作來培養(yǎng)學(xué)生的關(guān)鍵能力,非凡是獨立工作能力、想象力、創(chuàng)新能力。項目教學(xué)法包括了計劃、實施和檢查及成果展示的全過程。它是由學(xué)生自己來完成整個過程的教學(xué)方法。以下是一個項目教學(xué)法的簡案。

項目摘要:學(xué)生信息管理系統(tǒng)

(一)教學(xué)目標

1.培養(yǎng)學(xué)生運用VisualBasic知識解決實際新問題的能力;

2.培養(yǎng)學(xué)生獨立學(xué)習(xí)和工作的能力;

3.培養(yǎng)學(xué)生和人合作的能力。

(二)項目的實施過程

三、需要重點注重的兩個新問題

(一)教師角色的轉(zhuǎn)換

在行為導(dǎo)向教學(xué)中,對教師提出了更高的要求。教師應(yīng)是“雙師型”的教師,老師的角色由傳統(tǒng)的教學(xué)主導(dǎo)者轉(zhuǎn)變?yōu)榻虒W(xué)活動的引導(dǎo)者或主持人,在教學(xué)過程中,教師以咨詢員、伙伴、朋友等角色出現(xiàn)在學(xué)生中,教學(xué)方法由注重“教法”轉(zhuǎn)變?yōu)樽⒅亍皩W(xué)法”,為此,要完成教學(xué)任務(wù),教師要付出更多的心血。

(二)項目設(shè)計的合理性

篇2

2測量分析電路設(shè)計

A/D轉(zhuǎn)換與分析電路設(shè)計在圖3中,A/D轉(zhuǎn)換電路ADC0809的輸入端IN0~IN7分別與圖2中運算放大器的輸出端V0~V7連接,將模擬信號轉(zhuǎn)化為8位數(shù)字輸出信號,并傳送給單片機的D0~D7端口,由單片機進行分析運算。路模擬輸出信號共需要4塊ADC0809電路進行模數(shù)轉(zhuǎn)換。單片機P0.0~P0.7端口接收ADC0809輸出的8位數(shù)字信號后進行分析。

3電纜等效電阻檢測程序設(shè)計

3.1標準等效電阻值確定

端子壓接后電纜等效電阻的標準值因電纜長度不同而有差異。可采用預(yù)先設(shè)定標準值和自動確定標準值兩種方法。對線徑為0.4mm的銅芯線電纜,預(yù)先設(shè)置標準值RT標準可按照式(5)進行計算:RT標準=75+148•L(5)其中,L是電纜長度,單位為m;RT標準的單位是mΩ。自動確定標準值方法是以正常工藝在質(zhì)量穩(wěn)定情況下,將首根檢驗的壓接端子的電纜作為樣品,對32個芯線等效電阻進行自動檢測對比,選取其中的最小值,然后乘以系數(shù)1.05作為標準值。

3.2自動設(shè)定標準值程序設(shè)計

標準等效電阻值存放于I2C存儲器AT24C08中。檢測程序設(shè)計多路通信電纜端子精密檢測的主程序流程圖如圖5所示。以下為采集的主要函數(shù),假設(shè)通道數(shù)為36路。

篇3

1通信協(xié)議的制定

協(xié)議是用來管理通信的法規(guī),是網(wǎng)絡(luò)系統(tǒng)功能實現(xiàn)的基礎(chǔ)。由于DSP可以實現(xiàn)對網(wǎng)卡的直接操作,對應(yīng)于OSI網(wǎng)絡(luò)模型,網(wǎng)卡包含了物理層和數(shù)據(jù)鏈路層的全部內(nèi)容,因此,規(guī)定了數(shù)據(jù)鏈路層上數(shù)據(jù)幀封裝格式,就可以為基于DSP的局域網(wǎng)絡(luò)中任意站點之間的通信提供具體規(guī)范。因為以太網(wǎng)是當(dāng)今最受歡迎的局域網(wǎng)之一,在以太網(wǎng)中,網(wǎng)卡用于實現(xiàn)802.3規(guī)程,其典型代表是Novell公司的NE2000和3COM公司的3C503等網(wǎng)卡,所以研究工作中的具體試驗平臺是以DSP為核心構(gòu)成的以太局域網(wǎng),主要用于語音的實時通信,所使用的網(wǎng)卡為Novell公司的NE2000網(wǎng)卡。NE2000網(wǎng)卡的基本組成請見參考文獻[2],其核心器件是網(wǎng)絡(luò)接口控制器(NIC)DP8390。該器件有三部分功能:第一是IEEE802.3MAC(媒體訪問控制)子層協(xié)議邏輯,實現(xiàn)數(shù)據(jù)幀的封裝和解封,CSMA/CA(帶碰撞檢測功能的載波偵聽多址接入)協(xié)議以及CRC校驗等功能;第二是寄存器堆,用戶對NE2000網(wǎng)卡通信過程的控制主要通過對這些寄存器堆中各種命令寄存器編程實現(xiàn);第三是對網(wǎng)卡上緩沖RAM的讀寫控制邏輯。DP8390發(fā)送和接收采用標準的IEEE802.3幀格式。IEEE802.3參考了以太網(wǎng)的協(xié)議和技術(shù)規(guī)范,但對數(shù)據(jù)包的基本結(jié)構(gòu)進行了修改,主要是類型字段變成了長度字段。所以,以DSP為核心的局域網(wǎng)內(nèi)通信數(shù)據(jù)包基本格式如圖1所示。

DSP讀出數(shù)據(jù)包和打包從目的地址開始。目的地址用來指明一個數(shù)據(jù)幀在網(wǎng)絡(luò)中被傳送的目的節(jié)點地址。NE2000支持3種目的地址:單地址、組地址及廣播地址。單地址表示只有1個節(jié)點可以接收該幀信息;組地址表示最多可以有64個字節(jié)接收同一幀信息;而廣播地址則表示它可以被同一網(wǎng)絡(luò)中的所有節(jié)接收。源地址是發(fā)送幀節(jié)點的物理地址,它只能是單地址。目的地址和源地址指網(wǎng)卡的硬件地址,又稱物理地址。

在源地址之后的2個字節(jié)表示該幀的數(shù)據(jù)長度,只表示數(shù)據(jù)部分的長度,由用戶自己填入。數(shù)據(jù)字段由46~1500字節(jié)組成。大于1500字節(jié)的數(shù)據(jù)應(yīng)分為多個幀來發(fā)送;小于46字節(jié)時,必須填充至46字節(jié)。原因有兩個:一是保證從目的地址字段到幀校驗字段長度為64字節(jié)的最短幀長,以便區(qū)分信道中的有效幀和無用信息;二是為了防止一個站發(fā)送短幀時,在第一個比特尚未到達總線的最遠端時就完成幀發(fā)送,因而在可能發(fā)生碰撞時檢測不到?jīng)_突信號。NE2000對接收到的從目的地址字段后小于64字節(jié)的幀均認為是“碎片”,并予以刪除。在數(shù)據(jù)字段,根據(jù)系統(tǒng)的具體功能要求,用戶可以預(yù)留出若干個字節(jié)以規(guī)定相應(yīng)的協(xié)議,以便通信雙方依據(jù)這些字節(jié)中包含的信息實現(xiàn)不同的功能。

2基于DSP的網(wǎng)絡(luò)通信程序設(shè)計

如果基于網(wǎng)絡(luò)操作系統(tǒng),用戶可以利用一些軟件對網(wǎng)絡(luò)操作系統(tǒng)的支持,很容易地編寫出優(yōu)秀的網(wǎng)絡(luò)通信程序,但這些程序必須依附于網(wǎng)絡(luò)操作系統(tǒng)。而在DSP環(huán)境下,必須深入了解網(wǎng)絡(luò)接口控制器(NIC)的工作原理[2],通過對網(wǎng)絡(luò)直接編程,實現(xiàn)局域網(wǎng)內(nèi)任意站點之間的通信而完全拋開網(wǎng)絡(luò)操作系統(tǒng)。

DSP對網(wǎng)卡的通信過程控制就是DSP對DP8390中各種寄存器進行編程控制,完成數(shù)據(jù)分組的正確發(fā)送和接收。DP8390的所有內(nèi)部寄存器都是8位,映像到4個頁面。每個頁面有16個可供讀寫的寄存器地址(RA=00H~0fH)。頁面的選擇由命令寄存器CA控制。第0頁寄存器用于收發(fā)過程,第1頁寄存器主要用于DP8390的初始化,第2頁寄存器則用于環(huán)路診斷。DSP對寄存器的操作是將寄存器作為DSP的端口設(shè)備,其實際物理端口地址(PPA)為網(wǎng)卡基本I/O端口地址(BIOA)與寄存器地址(RA)之和(即PPA=BIOA+RA)。應(yīng)注意的是,PPA與寄存器間并不存在一一對應(yīng)關(guān)系,對PPA的讀操作與寫操作并不一定是對同一寄存器進行的,這種情況在第0頁尤其明顯。用戶數(shù)據(jù)分組在DSP和網(wǎng)卡交互是通過網(wǎng)卡的數(shù)據(jù)端口實現(xiàn)的,既可以用DMA方式也可以用PIO方式讀入數(shù)據(jù)分組或?qū)?shù)據(jù)分組送至網(wǎng)卡RAM緩沖區(qū)。在本系統(tǒng)中,DSP采用DMA方式對網(wǎng)卡進行數(shù)據(jù)讀寫。網(wǎng)卡的數(shù)據(jù)端口地址(NDPA)為網(wǎng)卡基本I/O地址(BIOA)加偏移地址10H(即NDPA=BIOA+10H)。

網(wǎng)卡通信過程控制可分為網(wǎng)卡初始化、接收控制和發(fā)送控制。下面分別予以討論。

2.1網(wǎng)卡初始化

網(wǎng)卡初始化的主要任務(wù)是設(shè)置所需的寄存器狀態(tài),確定發(fā)送和接收條件,并對網(wǎng)卡緩沖區(qū)RAM進行劃分,建立接收和發(fā)送緩沖環(huán)。具體過程請參閱參考文獻[2]。需要說明的是,每一塊網(wǎng)卡被賦予一個物理地址,以便通信站點的標識。這個物理地址存在網(wǎng)卡的PROM(存儲地址為0000~0005H)六個單元中,在網(wǎng)卡初始化時,通過遠程DMA讀入DSP內(nèi)存中,并送入網(wǎng)卡物理地址寄存器。在一步的意義在于:一方面,如果能正確讀出網(wǎng)卡的物理地址,則說明網(wǎng)卡硬件基本沒有問題,網(wǎng)卡的上電復(fù)位和DSP對網(wǎng)卡的初始化順利通過;另一方面,這個物理地址可以用于DSP網(wǎng)絡(luò)系統(tǒng)中的點名、包的過濾丟棄等服務(wù),也就是說,在鏈路層根據(jù)數(shù)據(jù)幀攜帶的源地址和目的地址確定數(shù)據(jù)報從哪里來,是否接收或丟棄。網(wǎng)卡初始化時另一個重要的工作就是接收緩沖環(huán)的設(shè)置,為了有效利用緩沖區(qū),NIC將接收緩沖區(qū)RAM構(gòu)成環(huán)形緩沖結(jié)構(gòu),如圖2所示。

接收緩沖區(qū)RAM分成多個256字節(jié)的緩沖區(qū),N個(N最大為256)這樣的緩沖區(qū)通過指針控制鏈接成一條邏輯上的緩沖環(huán)。緩沖環(huán)的開始頁面地址存入PSTART寄存器,環(huán)頁面結(jié)束地址存入PSTOP寄存器。PSTART和PSTOP確定了接收緩沖環(huán)的大小和邊界。為便于緩沖環(huán)讀寫操作,還需要2個指針:當(dāng)前頁面指針CURR和邊界指針BNRY。CURR確定下一包放在何處,起著緩沖環(huán)寫頁面指針作用;BNRY指向未經(jīng)DSP取走處理最早到達的數(shù)據(jù)包起始頁面,新接收的數(shù)據(jù)包不可將其覆蓋,起著緩沖環(huán)讀頁面指針的作用。也就是說,CURR可以告訴用戶網(wǎng)卡接收的數(shù)據(jù)分組當(dāng)前放到了什么位置,而BNRY則用于確定DSP讀緩沖環(huán)到了什么地方。由于接收緩沖區(qū)為環(huán)形結(jié)構(gòu),BNRY和CURR相等時,環(huán)緩沖區(qū)可能滿也可能空。為了使NIC能辨別這兩種狀態(tài),規(guī)定當(dāng)BNRY等于CURR時,才認為環(huán)緩沖區(qū)滿;當(dāng)緩沖區(qū)空時,CURR比BNRY指針值大1。因此,初始化時設(shè)置:BNRY=PSTART,CURR=PSTART+1。這時讀寫指針不一致,為了保證正確的讀寫操作,引入一軟件指針NEXTPK指示下一包起始頁面。顯然,初始化時NEXTPK=CURR。這時,緩沖環(huán)的讀指針對NEXTPK,而BNRY只是存儲分組緩沖區(qū)的起始頁面邊界指示,其值為NEXTPK-1。

2.2接收控制過程

DSP完成對DP8390的初始化后,網(wǎng)卡就處于接收狀態(tài),一旦收到分組,就自動執(zhí)行本地DMA,將NIC中FIFO數(shù)據(jù)送入接收緩沖環(huán),然后向主機申請“數(shù)據(jù)分組接收到”中斷請求。DSP如果響應(yīng)中斷,則啟動網(wǎng)卡遠程DMA讀,將網(wǎng)卡緩沖區(qū)中的數(shù)據(jù)分組讀入學(xué)生機存儲區(qū),然后對接收緩沖環(huán)CURR、NEXTPK、BNRY指針內(nèi)容進行修改,以便網(wǎng)卡能從網(wǎng)上正確接收后續(xù)分組。DSP響應(yīng)網(wǎng)卡接收中斷后,接收控制過程如下:

①設(shè)置遠程DMA的起始地址;RSAR0=00H,RSAR1=Nextpk。

②設(shè)置遠程DMA操作的字節(jié)數(shù),這個長度在46~1500字節(jié)范圍內(nèi)根據(jù)具體要求自己確定。

③0AH送命令寄存器CR,啟動遠程DMA讀。

④從網(wǎng)卡數(shù)據(jù)端口依序讀入數(shù)據(jù)分組,注意,最先讀入的4字節(jié)非數(shù)據(jù)分組內(nèi)容,第1字節(jié)為接收狀態(tài),第2字節(jié)為下一包頁地址指針,3與4字節(jié)為接收字節(jié)數(shù)。第2字節(jié)內(nèi)容應(yīng)該送入Nextpk,其它字節(jié)根據(jù)用戶要求處理。

⑤修改邊界指針BNRY=Nextpk-1。

⑥清除遠程DMA字節(jié)數(shù)寄存器RBCR0和RBCR1。

2.3發(fā)送控制過程

DSP先執(zhí)行遠程DMA寫操作,將內(nèi)存中的數(shù)據(jù)分組傳至網(wǎng)卡發(fā)送緩沖區(qū),然后啟動發(fā)送命令進行數(shù)據(jù)分組發(fā)送。發(fā)送控制過程如下:

①設(shè)置遠程DMA的起始地址為網(wǎng)卡發(fā)送緩沖區(qū)起始地址;

②設(shè)置遠程DMA操作的字節(jié)數(shù);

③12H送命令寄存器CR,啟動遠程DMA寫;

④依序送出數(shù)據(jù)分組至網(wǎng)卡發(fā)送緩沖區(qū);

⑤清除遠程DMA字節(jié)數(shù)寄存器;

⑥設(shè)置發(fā)送字節(jié)數(shù)寄存器TBCR0和TBCR1;

⑦12H送命令寄存器CR,啟動數(shù)據(jù)分組發(fā)送。

3發(fā)送方發(fā)送頻率的控制

發(fā)送方發(fā)送頻率的正確控制主要保護兩點:一是有一個最小發(fā)送時間間隔,否則會因為接收方不能及時接收而導(dǎo)致系統(tǒng)癱瘓;二是發(fā)送頻率能夠足具體的功能實現(xiàn)要求。譬如在語音的實時通信中,發(fā)送頻率就取決于聲卡的采樣頻率。在8kHz采樣頻率時,聲卡每秒鐘采樣8000字節(jié),采用1024字節(jié)需用時128ms,如果通信協(xié)議規(guī)定發(fā)送1次傳送1024字節(jié)有效數(shù)據(jù),則必須每128ms發(fā)送一次才能保證緩沖區(qū)有新數(shù)據(jù)待發(fā)送,也才能保證接收方有新數(shù)據(jù)播放。128ms是一個理論計算數(shù)值,在實際的操作中采樣速度和發(fā)送頻率之間總是不能完全匹配,而存放數(shù)據(jù)的緩沖區(qū)大小是有限的,如果沒有良好的控制技巧來實現(xiàn)正確發(fā)送,就會造成聲音抖動和延時。解決的辦法是雙緩沖技術(shù)和雙指針控制,并且根據(jù)采樣速度和發(fā)送頻率之間的匹配情況送入不同的發(fā)送通信進行處理后發(fā)送。正確發(fā)送的含義有兩方面,一是每次發(fā)送的都是新數(shù)據(jù),二是能滿足接收方總在播放新數(shù)據(jù)的需求。

4接收方防止數(shù)據(jù)包的丟失

篇4

2高職Java程序設(shè)計課程教學(xué)的改革

2.1教學(xué)內(nèi)容的改革

高職教育更側(cè)重于將學(xué)生培養(yǎng)成能夠滿足工作崗位或職業(yè)需求、掌握相應(yīng)技能的應(yīng)用型人才,因此,改革教學(xué)內(nèi)容是非常有必要的。改革教學(xué)內(nèi)容就是改變傳統(tǒng)的理論教學(xué),引入適量的案例,將基本理論的講授穿插于案例教學(xué)中。需要特別注意的是,選擇恰當(dāng)合理的案例是非常重要的,它的質(zhì)量能夠直接影響到最終的教學(xué)效果。因此,教師要根據(jù)學(xué)生認知的特點選擇具有適用性及代表性的案例,而且這些被選擇的案例必須能夠包含Java程序設(shè)計中的大部分知識,這些案例既區(qū)別于課堂上的舉例,但又和它們具有一定的聯(lián)系。為了能夠很好地展開案例教學(xué),教師在課前需要對案例教學(xué)進行周密詳細的安排,主要包括四個方面,它們分別是發(fā)放案例素材、組織案例實施、區(qū)分案例分析中的理論分析以及操作分析、安排處理案例教學(xué)中涉及到的外延知識。案例教學(xué)能夠在課堂上很好的結(jié)合理論與實踐,促進學(xué)生綜合能力的提升。學(xué)生帶著問題去分析案例,在這個過程中教師對涉及到的相關(guān)理論知識進行講授,這種方式能夠幫助學(xué)生更好地理解知識。對案例進行分析的過程不僅能夠使學(xué)生拓寬知識面,掌握分析問題的技巧,還能夠幫助學(xué)生將理論運用于實踐,更好地消化吸收所學(xué)知識。因此,相比傳統(tǒng)的理論教學(xué),案例教學(xué)這種教學(xué)方法更夠滿足當(dāng)今社會對應(yīng)用型人才的需求。

2.2教學(xué)方法的改革

當(dāng)今社會團隊協(xié)作能力是非常重要的,因此,改革教學(xué)方法最主要的一個途徑就是實行小組教學(xué)。所謂小組教學(xué)就是很據(jù)自愿或者協(xié)商的原則,將全班學(xué)生平均劃分成幾個小組,由小組成員共同推選出一個成員作為組長。在課堂上,首先教師需要在對典型案例進行講解的過程中穿插對Java語言的介紹,幫助學(xué)生更好地理解進而接受理論知識,并且深入了解Java語言面向?qū)ο蟮奶匦?。然后教師通過為每個學(xué)習(xí)小組安排編程的任務(wù)來使學(xué)生對案例進行分析,并且分析討論后每個小組都要確定出最終的解決方案,由教師來點評這些方案。為了能夠使學(xué)生高效率的完成規(guī)定任務(wù),教師要在分析討論過程中對學(xué)生提出相應(yīng)的技術(shù)要求及紀律要求,并設(shè)定一個恰當(dāng)?shù)耐瓿善谙?。這種教學(xué)模式充分體現(xiàn)了學(xué)生學(xué)習(xí)的自主性,彰顯了學(xué)生課堂的主體地位以及突出了教師協(xié)助引導(dǎo)的作用。小組教學(xué)的教學(xué)模式可以使學(xué)生進行不同的思想交流,擦出智慧的火花,正如蕭伯納所說“如果我有一個蘋果,你有一個蘋果,互相交換,還是你有一個蘋果,我有一個蘋果。但是我有一種想法,你有一種想法,交換一下,雙方就都有了兩種思想?!边@就說明了通過小組交流,學(xué)生思維會更加活躍,從而產(chǎn)生更優(yōu)的思想。通過小組教學(xué),不僅可以提升學(xué)生對理論知識的認知度,培養(yǎng)團隊合作的能力,還能夠提升學(xué)生分析、處理、解決問題的能力。此外,在小組教學(xué)的過程中,教師能夠迅速接收到來源于學(xué)生的反饋信息,比如反饋分析案例過程中遇到的問題等信息,通過這些反饋信息,教師能夠及時的采取相應(yīng)措施來解決問題,從而實現(xiàn)教學(xué)相長。

2.3考核方式的改革

對教學(xué)成果進行考核對無論是教還是學(xué)都能做出恰當(dāng)?shù)脑u價,目前我國高職院校中通常采取考核這一手段來對教學(xué)的效果進行檢驗。在傳統(tǒng)的教學(xué)模式下,通常采取卷面考試來進行考核,而且最終結(jié)果往往是由一次考試的成績來評定的,也就是說,無論學(xué)生平日里表現(xiàn)多好,但如果在作為最終考核的那次考試中發(fā)揮失常,那么就會在一定程度上否認這個學(xué)生的學(xué)習(xí)能力。而且這種考核方式并不能夠?qū)W(xué)生的能力、知識以及技能做到真實的反映。由此看來,為了能夠?qū)W(xué)生的學(xué)習(xí)做出恰當(dāng)合理的評價,改革考核方式是非常有必要的。這就要求高職院校要制定一個科學(xué)的評價標準,重點突出對學(xué)生知識應(yīng)用能力的培養(yǎng)。在對高職Java程序設(shè)計課程學(xué)習(xí)進行考核時,可以通過兩個方面來展開考核工作,相應(yīng)地,學(xué)生總成績也由兩部分組成,一部分是綜合能力考核成績,另一部分是平時課堂表現(xiàn)成績。具體來講,一方面,通過案例教學(xué),教師要求每個小組在對案例分析完成之后,做出案例的分析報告,在此基礎(chǔ)上,綜合小組成員的意見和建議,為假定的任意一個應(yīng)用領(lǐng)域或虛擬企業(yè)設(shè)計一個信息管理系統(tǒng),然后模擬其運行環(huán)境,最后進行編碼或者程序設(shè)計??傊褪墙o予學(xué)生一個展示自我知識、技能、操作等綜合能力的機會,這種考核方式能夠使學(xué)生更加牢固、系統(tǒng)的掌握所學(xué)的理論知識,這方面的考核成績占據(jù)較大的比重,在總成績中通常占據(jù)60%的比例。另一方面,也就是占據(jù)總成績40%的平時成績,具體來講,就是在平時教學(xué)過程中,教師要密切關(guān)注課堂小組討論中每位學(xué)生的表現(xiàn),并且加以記錄,給出相應(yīng)的分數(shù)。此外,在本門學(xué)科結(jié)束學(xué)習(xí)后,教師需要組織每個小組進行小組內(nèi)成員間的彼此評價,相互打分。最后,教師通過對這兩小部分的成績進行綜合的評定,給出每個學(xué)生最終的平時課堂表現(xiàn)成績。

篇5

1.1設(shè)計原理

為實現(xiàn)嵌入式田間圖像視頻采集,主控芯片選擇使用比較廣泛的S3C2440芯片,攝像頭采用芯片為中星微ZC301的USB攝像頭,把采集到的植物視頻信息傳輸?shù)街骺匦酒?。主控芯片包括把采集的視頻信息顯示到LED觸摸屏上,還要把采集到的信息傳輸?shù)絇C機中。大田視頻采集模塊總體結(jié)構(gòu)如圖1所示。圖1大田視頻采集模塊總體結(jié)構(gòu)圖軟件方面包括USB攝像頭的驅(qū)動程序、視頻采集程序、LED實時顯示程序網(wǎng)絡(luò)傳輸程序的設(shè)計、調(diào)試、燒寫等操作。

1.2主要研究的內(nèi)容

1)對ARM嵌入式Linux的內(nèi)核,Bootloader、YAFFS根文件系統(tǒng)的制作和移植,即完成軟件平臺的搭建;2)中星微ZC301的USB攝像頭驅(qū)動程序的設(shè)計;3)模塊的視頻采集程序的設(shè)計;4)設(shè)計驅(qū)動LED,來顯示采集到視頻信息的程序;5)設(shè)計TCP網(wǎng)絡(luò)傳輸程序,把視頻信息發(fā)送出去;6)把采集到的視頻圖像顯示到PC虛擬機上。

2、總體設(shè)計

2.1平臺設(shè)計

2.1.1 BootLoader制作和移植首先按下任意鍵,使ARM9的程序運行停止在如圖2所示的在DNW軟件上出現(xiàn)主選擇菜單界面;接著選擇下載到flash,即選擇‘1’,使用USB下載;在DNW軟件上出現(xiàn)有關(guān)閃存的各個存儲區(qū)間的情況。在上一步完成的基礎(chǔ)上,再選擇FLb.bin要燒寫到NAND閃存中的位置,即選擇‘0’,燒寫到NAND閃存中的boot的位置;然后在DNW軟件界面下執(zhí)行配置選項中的操作執(zhí)行指令,來進行下載地址、COM口和波特率設(shè)置;在DNW軟件上點擊USBPort選項中的傳輸操作,找到要燒寫FLb.bin的位置,選中FLb.bin文件;文件傳輸完成后即完成了BootLoader的移植。

2.1.2 系統(tǒng)內(nèi)核剪裁、制作和移植Linux內(nèi)核的移植和引導(dǎo)加載程序的燒寫過程幾乎是相同的,添加內(nèi)核的映像文件和BootLoader的移植都是相同的。也就是說,內(nèi)核是下載到NAND閃存的kernel位置;內(nèi)核移植時會出現(xiàn)移植進度條;移植完成后出現(xiàn)的和BootLoader的移植出現(xiàn)的提示一樣。到此,Linux內(nèi)核的移植就完成了。Linux內(nèi)核配置對話框如圖3所示。

2.1.3 FAFFS根文件系統(tǒng)的創(chuàng)建和燒寫過程1)使用目錄創(chuàng)造命令創(chuàng)造根文件系統(tǒng)的目錄,并創(chuàng)建在usr目錄下的bin、dev、etc等目錄,把根文件系統(tǒng)的框架搭建起來;2)創(chuàng)造根文件系統(tǒng)的設(shè)備文件,進入到dev目錄下使用創(chuàng)造命令來完成;3)安裝etc,進入到etc目錄下進行解壓etc.tar.gz;4)進入到內(nèi)核目錄下使用模塊編譯命令來編制內(nèi)核模塊;5)使用模塊安裝命令對模塊進行安裝;6)使用配置命令對其進行配置,編譯命令進行編譯,安裝命令進行安裝;7)進入到根文件目錄下使用ln-s命令來進行鏈接,重新再編譯內(nèi)核;8)將編譯生成的內(nèi)核映像文件通過USB傳輸?shù)介_發(fā)板的根文件系統(tǒng)中。

2.2軟件設(shè)計

2.2.1 攝像頭驅(qū)動程序設(shè)計

實現(xiàn)USB設(shè)備的即插即用功能的函數(shù)是攝像頭探測函數(shù),函數(shù)名稱是sp_probe。該驅(qū)動程序中的數(shù)據(jù)傳輸模塊使用takelet來實現(xiàn)對數(shù)據(jù)的同步快速傳遞,此函數(shù)對圖像數(shù)據(jù)進行解碼使用的是spcode.c程序。數(shù)據(jù)傳輸模塊函數(shù)的具體名稱是sp5_init_isoc,并且在sp5_open函數(shù)中掛有該函數(shù)的入口點。打開設(shè)備是同步傳輸數(shù)據(jù)開始的標志,這里實現(xiàn)數(shù)據(jù)傳輸?shù)暮瘮?shù)是sp_m_data,它把數(shù)據(jù)傳送給驅(qū)動程序,驅(qū)動程序?qū)?shù)據(jù)的訪問使用的是輪詢法。Linux中的USB器件通過系統(tǒng)的USB層來操作下層硬件,流程圖如圖4所示。

2.2.2 模塊視頻采集程序

本系統(tǒng)的視頻采集程序是基于V4L開發(fā)的,主要實現(xiàn)圖像采集設(shè)備的初始化、讀取和關(guān)閉等,基本操作流程如圖5所示。

3、大田視頻采集模塊的安裝與調(diào)試

3.1大田視頻采集模塊安裝執(zhí)行該命令要在該軟件文件所在的目錄下,將視頻采集模塊和PC虛擬機連接起來。這樣在PC虛擬機上就會顯示出視頻圖像,如圖6所示。

3.2大田視頻采集模塊現(xiàn)場調(diào)試在齊齊哈爾嫩江大橋以北的農(nóng)田里,對種植的土豆進行試驗。模塊調(diào)試如圖7所示。圖7模塊調(diào)試一觸摸屏LED和虛擬機顯示圖像不清晰,是因為幀的大小等參數(shù)設(shè)置得小,修改后圖像較原來清晰些;觸屏和虛擬機圖像顯示不連貫是因為其顯示程序中延時設(shè)置太大,以及內(nèi)核需要優(yōu)化小點。大田視頻采集模塊的對農(nóng)作物視頻采集穩(wěn)定,觸屏的視頻圖像顯示非常清晰,且以非常高的質(zhì)量把采集到的視頻圖像傳輸?shù)搅薖C機上(見圖8),在其上顯示的視頻圖像清晰連貫,能對農(nóng)作物進行非常有效的實時監(jiān)測;操作人員能夠從其中迅速獲得農(nóng)作物的自身生長發(fā)育情況和是否有病蟲害等信息,而且大田的農(nóng)作物視頻信息采集受陽光的影響也很小。本次試驗非常成功。圖8PC機顯示的視頻圖像

篇6

(1)程序應(yīng)最大限度的調(diào)用前期設(shè)計數(shù)據(jù),減少人工輸入,程序需通過制作數(shù)據(jù)接口,從前期設(shè)計軟件中有選擇性的調(diào)入全橋總信息及每個墩臺的墩臺號、墩臺里程、基礎(chǔ)類型、初始樁長、基頂基底標高、基礎(chǔ)尺寸、樁基布置等信息,減少設(shè)計者重復(fù)輸入,同時降低操作錯誤率。(2)樁基展開布置時要求對每根樁的數(shù)據(jù)進行操作,現(xiàn)有的每個橋墩樁基數(shù)據(jù)中樁基數(shù)據(jù)需通過一定轉(zhuǎn)換,以圖形形式清晰明了的展現(xiàn)出來,同時還能夠提供一定格式的數(shù)據(jù)供其他程序進行計算等。(3)設(shè)計者對全橋每個橋墩基礎(chǔ)數(shù)據(jù)修改編輯后,程序需將數(shù)據(jù)存儲起來,以備進行下一步操作和下次查詢。但由于全橋信息量較大,需研究有效的數(shù)據(jù)存儲形式,以便設(shè)計者能快速調(diào)用和修改。

1.2數(shù)據(jù)在不同的坐標系進行坐標轉(zhuǎn)換

(1)在程序默認樁坐標、地質(zhì)提供的樁坐標以及橋梁樁基計算程序樁坐標3者之間進行轉(zhuǎn)換,提供給設(shè)計者便捷的修改方式,滿足各種不同的坐標系統(tǒng)之間進行靈活的的轉(zhuǎn)換。(2)地質(zhì)展開剖面圖的不確定性決定了基礎(chǔ)展開形式的多樣性,樁與樁之間的相互位置關(guān)系變化多樣,程序應(yīng)能適用各種不同的情況,快速計算各樁位之間的相互位置關(guān)系。

1.3程序的繪圖及讀圖功能

(1)根據(jù)地質(zhì)剖面圖的展開路徑繪制基礎(chǔ)展開布置圖時,程序通過讀取地質(zhì)剖面圖中的信息,校核地質(zhì)剖面圖的比例,定位每個鉆孔的位置,根據(jù)每根樁與各鉆孔之間的位置關(guān)系來繪制基礎(chǔ)展開布置圖。展開圖能按照一定的縱橫向比例繪制,每個樁位標明相應(yīng)的編號等。程序應(yīng)根據(jù)地質(zhì)剖面圖的形式,靈活采用單點定位和多點定位,同一樁基靈活拆分,提供多樣的繪圖方式。(2)程序需對地質(zhì)柱狀圖逐孔進行識別提取各地層信息后,根據(jù)專業(yè)要求將地層詳細的描述轉(zhuǎn)換到地質(zhì)剖面圖中,完善各地層的地質(zhì)描述。根據(jù)縱橫向比例將地層名稱、承載力值等描述添加到地質(zhì)剖面圖中。(3)程序應(yīng)有完善的圖面清理及圖面排版布局功能,以及樁長反讀及校核功能便于進行后續(xù)計算等。

1.4橋梁基礎(chǔ)的數(shù)量計算及匯總功能

(1)程序應(yīng)根據(jù)全橋工程數(shù)量計算模板衍生出單墩數(shù)量計算模板進行展開后的樁基計算,以統(tǒng)一數(shù)量計算格式,提高程序自動轉(zhuǎn)換、批量處理效率。(2)根據(jù)每根樁的鉆孔資料進行各鉆孔土層進行分析,歸類匯總各土層的數(shù)量,盡可能精確計算單墩的基礎(chǔ)數(shù)量。(3)程序應(yīng)將全橋各橋墩的單墩基礎(chǔ)數(shù)量進行匯總,生成全橋總數(shù)量。

2關(guān)鍵技術(shù)

2.1數(shù)據(jù)接口及轉(zhuǎn)換

(1)基礎(chǔ)的設(shè)計需要前期數(shù)據(jù)的調(diào)出量大,種類雜,數(shù)據(jù)調(diào)入調(diào)出時盡量減少對象中數(shù)據(jù)轉(zhuǎn)換,采用數(shù)組進行內(nèi)部運算完成后,再將運算結(jié)果與表格進行對接,將對表格對象的操作次數(shù)降低到最少,提高運行速度。(2)設(shè)定3套坐標系統(tǒng)進行靈活的轉(zhuǎn)換,將數(shù)據(jù)圖形化,直觀化,如圖1所示。樁基礎(chǔ)設(shè)計中,地質(zhì)樁號又能根據(jù)實際鉆孔路徑任意編排,樁間距能迅速計算導(dǎo)出,對部分數(shù)據(jù)進行監(jiān)控,當(dāng)數(shù)據(jù)修改時,能迅速響應(yīng),調(diào)出數(shù)據(jù),展示圖形,操作相當(dāng)方便,顯示也很直觀明了。程序計算完成后,能自動進行存儲,數(shù)據(jù)更新及時,靈活方便。任意路徑展開樁基的計算,如圖2所示。對于樁基礎(chǔ),程序處理流程如圖3所示。

2.2樁基坐標轉(zhuǎn)換的實現(xiàn)

前期的數(shù)據(jù)收集后,通過校核補齊后轉(zhuǎn)換成程序默認的坐標系統(tǒng),樁號順序按照從上到下和從左到右的順序編排的開來,這樣編排符合一般的標號習(xí)慣。橋梁設(shè)計軟件中樁排列一般是按x坐標從小到大,然后y坐標從小到大的順序排列的,這種排列方式便于程序計算。地質(zhì)專業(yè)進行地質(zhì)鉆孔時,形成相應(yīng)鉆孔順序和坐標系統(tǒng)。于是程序內(nèi)部需要建立3套坐標系統(tǒng)的相互關(guān)系網(wǎng),以便能快速在各坐標系統(tǒng)之間進行轉(zhuǎn)換,快速與外部數(shù)據(jù)進行導(dǎo)入導(dǎo)出操作。程序內(nèi)部各坐標之間的轉(zhuǎn)換關(guān)系如圖4所示。繪制展布圖時,承臺、樁及地層信息等在CAD圖中的縱橫向定位是比較棘手的問題。縱向定位主要有每根樁的樁頂高程、樁長、樁底高程、地層描述信息等,橫向定位主要是樁與鉆孔之間關(guān)系、樁與樁之間的關(guān)系定位等??v向定位關(guān)鍵是確定定位標尺后計算高程標定縱向元素,橫向定位的關(guān)鍵是定位鉆孔按繪圖比例計算距離在定位樁位。樁基縱向定位的基本的流程如圖5所示。

2.3添加地質(zhì)鉆孔信息

地層信息由地質(zhì)鉆孔柱狀圖提取后展示到地質(zhì)剖面圖中前,需要對地質(zhì)柱狀圖進行分析過濾提取各地層信息,再在地質(zhì)剖面圖中定位到鉆孔編號后根據(jù)地層上下界面高程縱向定位到各地層中去。添加地質(zhì)鉆孔信息后如圖7所示。2.5單墩樁基及全橋樁基工程數(shù)量的計算計算單墩樁基工程數(shù)量時,程序通過全橋工程數(shù)量表衍生出單墩工程數(shù)量表,保持基礎(chǔ)工程數(shù)量計算相關(guān)工作表中各項目的完整,利用其固定性而又適應(yīng)其靈活性,繼承全橋工程數(shù)量表的計算方法和特點。設(shè)計者對單墩工程數(shù)量計算完成后,程序?qū)⒏鞫諗?shù)量匯總起來,再經(jīng)過設(shè)計者復(fù)核,程序再將其與全橋工程數(shù)量整合在一起。其間的計算步驟均允許設(shè)計者參與修改,同時程序進行邏輯性校核等。匯總各墩數(shù)據(jù)到全橋工程數(shù)量表中的流程圖如圖8所示。

篇7

1引言

遺傳算法是模擬生物在自然環(huán)境中的遺傳和進化過程而形成的一種自適應(yīng)全局優(yōu)化概率搜索算法??偟恼f來,遺傳算法是按不依賴于問題本身的方式去求解問題。它的目標是搜索這個多維、高度非線性空間以找到具有最優(yōu)適應(yīng)值(即最小費用的)的點[1]。

基本遺傳算法是一個迭代過程,它模仿生物在自然環(huán)境中的遺傳和進化機理,反復(fù)將選擇算子、交叉算子和變異算子作用于種群,最終可得到問題的最優(yōu)解和近似最優(yōu)解。

2遺傳算法程序設(shè)計改進比較

2.1基本遺傳算法對TSP問題解的影響

本文研究的遺傳算法及改進算法的實現(xiàn)是以C++語言為基礎(chǔ),在Windows2000的版本上運行,其實現(xiàn)程序是在MicrosoftVisualStadio6.0上編寫及運行調(diào)試的。

1)遺傳算法的執(zhí)行代碼

m_Tsp.Initpop();//種群的初始化

for(inti=0;i<m_Tsp.ReturnPop();i++)

m_Tsp.calculatefitness(i);//計算各個個體的適應(yīng)值

m_Tsp.statistics();//統(tǒng)計最優(yōu)個體

while(entropy>decen||variance>decvar)//m_Tsp.m_gen<100)

{

//將新種群更迭為舊種群,并進行遺傳操作

m_Tsp.alternate();//將新種群付給舊種群

m_Tsp.generation();//對舊種群進行遺傳操作,產(chǎn)生新種群

m_Tsp.m_gen++;

m_Tsp.statistics();//對新產(chǎn)生的種群進行統(tǒng)計

}

2)簡單的遺傳算法與分支定界法對TSP問題求解結(jié)果的對比

遺傳算法在解決NPC問題的領(lǐng)域內(nèi)具有尋找最優(yōu)解的能力。但隨著城市個數(shù)的增加,已沒有精確解,無法確定遺傳算法求解的精度有多高。一般情況下,當(dāng)?shù)鷶?shù)增大時,解的精度可能高,但是時間開銷也會增大。因此可以通過改進遺傳算法來提高搜索能力,提高解的精度。

2.2初始化時的啟發(fā)信息對TSP問題解的影響

1)初始化啟發(fā)信息

在上述實驗算法的基礎(chǔ)上,對每一個初始化的個體的每五個相鄰城市用分支界定法尋找最優(yōu)子路徑,然后執(zhí)行遺傳算法。

2)遺傳算法與含有啟發(fā)信息的遺傳算法求解結(jié)果的對比

當(dāng)城市數(shù)增至20個時,用分支定界法已經(jīng)不可能在可以接受的時間內(nèi)得到精確的解了,只能通過近似算法獲得其可接受的解。試驗設(shè)計中算法的截止條件:固定迭代1000代。表2中的平均最優(yōu)解為經(jīng)過多次試驗(10次以上)得到的最優(yōu)解的平均值,最優(yōu)解的出現(xiàn)時間為最優(yōu)解出現(xiàn)的平均時間,交叉操作次數(shù)為最優(yōu)解出現(xiàn)時交叉次數(shù)的平均值。

表220個城市的TSP問題求解結(jié)果數(shù)據(jù)

算法交叉操作

次數(shù)最優(yōu)解

出現(xiàn)時間平均

最優(yōu)解

簡單遺傳算法80244.479.4s1641.8

含初始化啟發(fā)信息的GA79000.237.4s1398.9

從表2中可以看出,當(dāng)初始種群時引入啟發(fā)信息將提高遺傳算法的尋優(yōu)能力。同時縮短了遺傳算法的尋優(yōu)時間和問題的求解精度。

2.3交叉算子對TSP問題解的影響

1)循環(huán)貪心交叉算子的核心代碼

for(i=1;i<m_Chrom;i++)

{

flag=0;

city=m_newpop[first].chrom[i-1];//確定當(dāng)前城市

j=0;

while(flag==0&&j<4)

{

sign=adjcity[city][j];//adjcity數(shù)組的數(shù)據(jù)為當(dāng)前城市按順序排列的鄰接城市

flag=judge(first,i,sign);//判斷此鄰接城市是否已經(jīng)存在待形成的個體中

j++;

}

if(flag==0)//如果所有鄰接城市皆在待擴展的個體中

{

while(flag==0)

{

sign=(int)rand()/(RAND_MAX/(m_Chrom-1));//隨機選擇一城市

flag=judge(first,i,sign);

}

}

if(flag==1)

m_newpop[first].chrom[i]=sign;

}

2)問題描述與結(jié)果比較

下面筆者用經(jīng)典的測試遺傳算法效率的OliverTSP問題來測試循環(huán)貪心交叉算子的解的精度和解效率。OliverTSP問題的30個城市位置坐標如表3所示[2]。

從表4、圖1中可以看到,貪心交叉算子大大提高了遺傳算法的尋優(yōu)能力,同時也降低了交叉操作次數(shù)。在多次試驗中,貪心交叉算子找到的最優(yōu)解與目前記載的最佳數(shù)據(jù)的誤差率為2.7%。而部分匹配交叉算子找到的最優(yōu)解與目前記載的最佳數(shù)據(jù)的誤差率高達7%。從而可以得到交叉算子對于遺傳算法

2.4并行遺傳算法消息傳遞實現(xiàn)的核心代碼

1)主程序代碼

//接收各個從程序的最優(yōu)個體

for(i=0;i<slave;i++)

{

MPI_Recv(Rchrom[i],chrom,MPI_UNSIGNED,MPI_ANY_SOURCE,gen,MPI_COMM_WORLD,&status);

}

//計算接收各個從程序的最優(yōu)個體的回路距離

for(i=0;i<slave;i++)

{

fitness[i]=0.0;

for(intj=0;j<chrom-1;j++)

fitness[i]=fitness[i]+distance[Rchrom[i][j]][Rchrom[i][j+1]];

fitness[i]=fitness[i]+distance[Rchrom[i][0]][Rchrom[i][chrom-1]];

}

//找到最優(yōu)的個體并把它記錄到文件里

for(i=0;i<slave;i++)

{

if(1/fitness[i]>min)

{

sign=i;

min=1/fitness[i];

}

}

fwrite(&gen,sizeof(int),1,out);

for(i=0;i<chrom;i++)

fwrite(&Rchrom[sign][i],sizeof(unsigned),1,out);

fwrite(&fitness[sign],sizeof(double),1,out);

//每九代向從程序發(fā)送一個最優(yōu)個體

if(gen%9==0)

MPI_Bcast(Rchrom[sign],chrom,MPI_UNSIGNED,0,MPI_COMM_WORLD);

2)從程序代碼

//將上一代的最優(yōu)個體傳回主程序

MPI_Send(Rchrom1,chrom,MPI_UNSIGNED,0,gen,MPI_COMM_WORLD);

//每九代接收一個最優(yōu)個體并將其加入種群中替換掉最差個體

if(gen%9==0)

{

PI_Bcast(Rchrom2,chrom,MPI_UNSIGNED,0,MPI_COMM_WORLD);

Tsp.IndiAlternate(Rchrom2);

}

//進行下一代的計算

Tsp.Aternate();

Tsp.Generation();

Tsp.Statistics();

3)并行遺傳算法的性能

筆者在MPI并行環(huán)境下,用C++語言實現(xiàn)了一個解決TSP問題的粗粒度模型的并行遺傳算法。該程序采用的是主從式的MPI程序設(shè)計,通過從硬盤的文件中讀取數(shù)據(jù)來設(shè)置染色體長度、種群的規(guī)模、交叉概率和變異概率等參數(shù)。試驗環(huán)境為曙光TC1700機,測試的對象是OliverTSP問題的30個城市的TSP問題。

正如在測試串行遺傳算法所提到的數(shù)據(jù)結(jié)果,并行遺傳算法也沒有達到目前所記錄的最好解,但是它提高了算法的收斂性,并行遺傳算法的收斂趨勢如圖2所示[4]。

圖2遺傳算法的收斂過程

3結(jié)束語

本文通過對基本遺傳算法的不斷改進,證明了添加啟發(fā)信息、改進遺傳算子和利用遺傳算法固有的并行性都可以提高遺傳算法的收斂性,其中對遺傳算法交叉算子的改進可以大大提高遺傳算法的尋優(yōu)能力。

參考文獻

[1]劉勇、康立山,陳毓屏著.非數(shù)值并行算法-遺傳算法.北京:科學(xué)出版社1995.1

篇8

對于大多數(shù)課程而言,從宏觀上將課程知識點及其關(guān)聯(lián)講授給學(xué)生非常必要,這便于學(xué)生更加系統(tǒng)深刻地理解所學(xué)內(nèi)容。作為教材講解C語言程序設(shè)計的知識點結(jié)構(gòu)。知識點之間的關(guān)聯(lián)可以層層細化,教師首先從宏觀上給學(xué)生介紹C語言程序的整體組成結(jié)構(gòu)。教師對涉及的知識點進行歸類,共包含預(yù)處理命令、數(shù)據(jù)類型、運算符、語句和函數(shù)等5部分,從宏觀上梳理C語言與程序設(shè)計課程的知識點是非常必要和重要的,這樣可以避免學(xué)生“只見樹木,不見森林”,最后只學(xué)到一堆零散的知識點,只有從宏觀上把握各個知識點在知識體系中的位置和作用,才能學(xué)得深、記得牢。對于程序語言課程,如果僅僅介紹語法的運用,學(xué)生往往對知識點理解不深刻。我們在教學(xué)實踐中的體會是:在講解C語言語法的基礎(chǔ)上,適當(dāng)?shù)仄饰鼍幊陶Z言在計算機中的運行機制,會讓學(xué)生的理解更加透徹。因此,我們的課堂教學(xué)方法分為如下兩部分。

1)課件講解。課件講解包括兩部分,即知識點要點總結(jié)和知識點運行機制剖析。知識點要點總結(jié)就是告訴學(xué)生該知識點如何使用;而知識點運行機制剖析則告訴學(xué)生該程序在計算機內(nèi)存中的執(zhí)行過程。由于絕大部分高校在開設(shè)C語言程序設(shè)計之前都會開設(shè)計算機文化基礎(chǔ)等課程,因此學(xué)生有足夠的計算機基礎(chǔ)知識來理解C語言程序的運行機制。

2)實例演示。作為一門編程語言,C語言需要在實踐中理解和掌握,因此,課堂教學(xué)中,在具體的編程環(huán)境(如VC++6.0)下演示十分必要。通過在具體的軟件環(huán)境下編程,告訴學(xué)生應(yīng)該做什么和不應(yīng)該做什么,并總結(jié)該知識點的注意事項。相比傳統(tǒng)的脫離編程環(huán)境,只在PPT或黑板上進行板書的教學(xué)模式,該方法的教學(xué)效果要好得多。在課堂教學(xué)中,具體的教學(xué)步驟如下:①使用PPT或者板書列出該知識點的注意要點;②在編程環(huán)境(如VC++6.0)下演示該知識點的用法,給出正確的和錯誤的使用方法,并進行對比;③通過幻燈片動畫或Flas等形式演示程序在計算機內(nèi)存中的執(zhí)行過程,讓學(xué)生更加深刻地理解程序的運行機制。

3)教學(xué)難點與重點——“復(fù)合知識點”。從C語言的教學(xué)內(nèi)容來講,數(shù)組、函數(shù)和指針是教學(xué)的重點章節(jié),這些章節(jié)之間相互關(guān)聯(lián)的部分又是重點中的難點,如數(shù)組和函數(shù)結(jié)合,數(shù)組名做函數(shù)參數(shù),數(shù)組和指針結(jié)合,指向數(shù)組的指針變量,函數(shù)和指針結(jié)合,指向函數(shù)的指針變量等。在教學(xué)過程中要反復(fù)強調(diào)各個知識點的注意事項,如果基本知識點能夠理解透徹,上述難點內(nèi)容也就迎刃而解了。

1.2上機實踐教學(xué)

在實踐教學(xué)中,教師可以通過實際教學(xué)案例循序漸進地強化學(xué)生對C語言知識點的理解。上機實踐的教學(xué)內(nèi)容通常分為兩部分:基本知識點練習(xí)和綜合訓(xùn)練。首先通過基本知識點的練習(xí),讓學(xué)生掌握該知識點的使用,即鞏固課堂所學(xué)內(nèi)容;然后通過一個綜合性的大作業(yè),訓(xùn)練學(xué)生綜合應(yīng)用C語言知識點的能力,例如,通過編寫“學(xué)生課程成績統(tǒng)計系統(tǒng)”考查學(xué)生對數(shù)組、結(jié)構(gòu)體、指針、函數(shù)、文件等知識的綜合掌握情況。對于初學(xué)編程語言的學(xué)生,往往沒有養(yǎng)成良好的編程習(xí)慣,出錯的可能性較大,而出錯之后進行調(diào)試又將耗費較長的時間,這勢必對學(xué)生的學(xué)習(xí)熱情產(chǎn)生負面影響。因此,一開始就給學(xué)生制定科學(xué)的編程步驟和規(guī)范,使學(xué)生養(yǎng)成良好的編程習(xí)慣,將大大減少程序出錯的可能。下面是按照上述五步編寫的一個完整的C語言程序,用來比較兩個整數(shù)的大小。按照上述五步進行編程,經(jīng)過一段時間的訓(xùn)練之后,學(xué)生出現(xiàn)語法錯誤的可能性大大降低,此時學(xué)生更多的精力將集中在程序算法的設(shè)計和實現(xiàn)上。

1.3考試形式

對于C語言程序設(shè)計的考核方式,我們采用知識點考核和編程實踐相結(jié)合的方式。知識點考核偏重于C語言基本語法,用于檢驗學(xué)生對知識點的掌握是否全面,此項考核約占總成績的40%;編程實踐考核用于檢驗學(xué)生的實際動手能力,學(xué)生將在規(guī)定的時間內(nèi)根據(jù)題目在機器上編程,此項考核約占總成績的60%。為了實現(xiàn)知識點的考核,我們將考試與計算機二級C語言上機考試緊密結(jié)合,采用題庫平臺進行上機考試,學(xué)生直接在機器上答題并提交,知識點考核多采取客觀題,如填空題、程序修改題以及讀程序題等,編程題在實戰(zhàn)編程中考核。C語言程序設(shè)計課程的重要特點就是實踐性強,學(xué)習(xí)該課程的目的就是為了編寫程序。因此從考試的角度講,進行編程實踐是最合適的方式,通過上機編程來考核學(xué)生的學(xué)習(xí)情況也是最公正和客觀的方式。

2C語言程序設(shè)計教學(xué)實踐結(jié)果分析

中國礦業(yè)大學(xué)(北京)每年都有40多個班級同時開設(shè)C語言程序設(shè)計課程,因此該課程教學(xué)質(zhì)量的高低將直接影響全校理工科學(xué)生對C語言的理解和掌握。中國礦業(yè)大學(xué)(北京)C語言程序設(shè)計教學(xué)團隊經(jīng)過長期的探索總結(jié)出一套行之有效的C語言教學(xué)方法,我們將上述方法在學(xué)校越崎實驗班中進行了試點。如圖2所示,采用上述教學(xué)法的越崎實驗班的C語言程序設(shè)計課程考試成績要明顯好于其他班級,其中90分以上的學(xué)生占10.7%,80分以上的學(xué)生占總?cè)藬?shù)的53.6%。另外,學(xué)生的學(xué)習(xí)積極性比采用上述方法前得到明顯提高,很多學(xué)生都對計算機編程產(chǎn)生了濃厚興趣,實踐證明我們提出的上述方法是行之有效的。

篇9

要擁有一臺Pentium90以上、16MBRAM、520MB以上硬盤容量的PC機以及一臺43cm以上的大屏幕監(jiān)視器和一塊OpenGL三維圖形加速卡組成的系統(tǒng),就能與圖形工作站相媲美,但價格卻便宜數(shù)十倍。

本文作者一直從事計算機圖形應(yīng)用開發(fā)工作。原來是在SGI工作站上利用OpenGL開發(fā)圖形程序,后來又首先在國內(nèi)第一塊三維圖形加速卡AGC-3D上基于WindowsNT的VisualC++2.0環(huán)境下繼續(xù)進行開發(fā)。在開發(fā)過程中,同一OpenGL程序幾乎不用修改就能在兩個平臺間來回移植,效果甚好。

一、OpenGL特點及功能

OpenGL是一個開放的三維圖形軟件包,它獨立于窗口系統(tǒng)和操作系統(tǒng),能十分方便地在各平臺間移植。

OpenGL具有七大功能。

(1)建模OpenGL圖形庫除了提供基本的點、線、多邊形的繪制函數(shù)外,還提供了復(fù)雜的三維物體(如球、錐、多面體、茶壺等)以及復(fù)雜曲線和曲面(如Bezier、Nurbs等曲線或曲面)繪制函數(shù)。

(2)變換OpenGL圖形庫的變換包括基本變換和投影變換?;咀儞Q有平移、旋轉(zhuǎn)、變比和鏡像四種變換,投影變換有平行投影(又稱正射投影)和透視投影兩種變換。

(3)顏色模式設(shè)置OpenGL顏色模式有兩種,即RGBA模式和顏色索引(ColorIndex)。

(4)光照和材質(zhì)設(shè)置OpenGL光有輻射光(EmittedLight)、環(huán)境光(AmbientLight)、漫反射光(DiffuseLight)和鏡面光(SpecularLight)。材質(zhì)是用光反射率來表示。場景(Scene)中物體最終反映到人眼的顏色是光的紅綠藍分量與材質(zhì)紅綠藍分量的反射率相乘后形成的顏色。

(5)紋理映射(TexureMapping)利用OpenGL紋理映射功能可以十分逼真地表達物體表面細節(jié)。

(6)位圖顯示和圖像增強圖像功能除了基本的拷貝和像素讀寫外,還提供了融合(Blending)、反走樣(Antialiasing)和霧(fog)的特殊圖像效果處理。

(7)雙緩存(DoubleBuffering)動畫雙緩存即前臺緩存和后臺緩存,簡而言之,后臺緩存計算場景、生成畫面,前臺緩存顯示后臺緩存已畫好的畫面。

此外,利用OpenGL還能實現(xiàn)深度暗示(DepthCue)、運動模糊(MotionBlur)等特殊效果。

二、OpenGLforWindowsNT圖形庫

OpenGL圖形庫一共有100多個函數(shù)。其中核心函數(shù)有115個,它們是最基本的函數(shù),其前綴是gl;OpenGL實用庫(OpenGLutilitylibrary,GLU)的函數(shù)功能更高一些,如繪制復(fù)雜的曲線曲面、高級坐標變換、多邊形分割等,共有43個,前綴為glu;OpenGL輔助庫(OpenGLauxiliarylibrary,GLAUX)的函數(shù)是一些特殊的函數(shù),包括簡單的窗口管理、輸入事件處理、某些復(fù)雜三維物體繪制等函數(shù),共有31個,前綴為aux。

此外,還有六個WGL函數(shù)非常重要,專用于OpenGL和WindowsNT窗口系統(tǒng)的連接,其前綴為wgl,主要用于創(chuàng)建和選擇圖形操作描述表(renderingcontexts)以及在窗口內(nèi)任一位置顯示字符位圖。這些功能是WindowsNT對OpenGL的唯一補充,見表1所示。

表1管理圖形操作描述表的WGL函數(shù)

另外,還有五個Win32函數(shù)用來處理像素格式(pixelformats)和雙緩存。由于它們是對Win32系統(tǒng)的擴展,因此不能應(yīng)用在其他OpenGL平臺上,見表2所示。

表2管理像素格式Win32函數(shù)

三、OpenGLforWindowsNT程序設(shè)計

OpenGLforWindowsNT的程序設(shè)計與OpenGLforUNIX的程序設(shè)計有一點小區(qū)別,關(guān)鍵就在于如何將OpenGL與不同操作系統(tǒng)下的窗口系統(tǒng)連接起來。如果調(diào)用OpenGL輔助庫窗口管理函數(shù),則不用考慮這些問題。下面將主要介紹在WindowsNT下OpenGL的程序設(shè)計關(guān)鍵。

1.圖形操作描述表

在WindowsNT下窗口程序必須首先處理設(shè)備描述表(DeviceContexts,DC),DC包含許多如何在窗口上顯示圖形的信息,即指定畫筆和刷子的顏色,設(shè)置繪圖模式、調(diào)色板、映射模式以及其他圖形屬性。同樣,OpenGLforWindowsNT的程序也必須使用DC,這與其他Windows程序類似。但是,OpenGLforWindowsNT必須處理特殊的DC圖形操作描述表,這是DC中專為OpenGL使用的一種。一個OpenGL應(yīng)用圖形操作描述表內(nèi)有OpenGL與WindowsNT窗口系統(tǒng)相關(guān)的各種信息。一個OpenGL應(yīng)用首先必須創(chuàng)建一個圖形操作描述表,然后再啟動它,最后在所定義的窗口內(nèi)按常規(guī)方式調(diào)用OpenGL函數(shù)繪制圖形。

一個圖形操作描述表不同于其他DC,它們調(diào)用每個GDI函數(shù)都需要一個句柄,而圖形操作描述表方式下只需一個句柄就可任意調(diào)用OpenGL函數(shù)。也就是說,只要當(dāng)前啟用了某個圖形操作描述表,那么在未刪除圖形操作描述表之前可以調(diào)用任何OpenGL函數(shù),進行各種操作。

2.像素格式

在創(chuàng)建一個圖形操作描述表之前,首先必須設(shè)置像素格式。像素格式含有設(shè)備繪圖界面的屬性,這些屬性包括繪圖界面是用RGBA模式還是顏色表模式,像系緩存是用單緩存還是雙緩存,以及顏色位數(shù)、深度緩存和模板緩存所用的位數(shù),還有其他一些屬性信息。

(1)像素格式結(jié)構(gòu)

每個OpenGL顯示設(shè)備都支持一種指定的像素格式號。一般用一個名為PIXELFORMATDESCRIPTOR的結(jié)構(gòu)來表示某個特殊的像素格式,這個結(jié)構(gòu)包含26個屬性信息。Win32定義的PIXELFORMATDESCRIPTOR如下所示:

typedefstructtagPIXELFORMATDESCRIPTOR

{

WORDnSize;

WORDnVersion;

DWORDdwFlags;

BYTEiPixelType;

BYTEcColorBits;

BYTEcRedBits;

BYTEcRedShift;

BYTEcGreenBits;

BYTEcGreenShift;

BYTEcBlueBits;

BYTEcBlueShift;

BYTEcAlphaBits;

BYTEcAlphaShift;

BYTEcAccumBits;

BYTEcAccumRedBits;

BYTEcAccumGreenBits;

BYTEcAccumBlueBits;

BYTEcAccumAlphaBits;

BYTEcDepthBits;

BYTEcStencilBits;

BYTEcAuxBuffers;

BYTEilayerType;

BYTEbReserved;

DWORDdwLayerMask;

DWORDdwVisibleMask;

DWORDdwDamageMask;

PIXELFORMATDESCRIPTOR,

*PPIXELFORMATDESCRIPTOR,

FAR*LPPIXELFORMATDESCRIPTOR;

(2)初始化PIXELFORMATDESCRIPTOR結(jié)構(gòu)

PIXELFORMATDESCRIPTOR中每個變量值的具體含義和設(shè)置可以參

考有關(guān)資料,下面舉出一個PIXELFORMATDESCRIPTOR初始化例子來簡要

說明相關(guān)變量的意義。定義PIXELFORMATDESCRIPTOR結(jié)構(gòu)的pfd如下:

PIXELFORMATDESCRIPTORpfd=

{

sizeof(PIXELFORMATDESCRIPTOR),//結(jié)構(gòu)尺寸

l,//結(jié)構(gòu)版本

PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//特性標志

PFD-TYPE-RGBA,//RGBA模式

24,//24位顏色

0,0,0,0,0,0,//不涉及這些屬性

0,0,0,0,0,0,0,//沒有alpha緩存和累積緩存

32,//32位深度緩存

0,0,//沒有模板緩存和輔助緩存

PFD-MAIN-PLANE,//主層類型

0,//保留結(jié)構(gòu)數(shù)

0,0,0,//不支持結(jié)構(gòu)數(shù)

};

在這個結(jié)構(gòu)里,前兩個變量的含義十分明顯。第三個變量dwFlags的值是PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,表明應(yīng)用程序使用OpenGL函數(shù)來繪制窗口,第四個表明當(dāng)前采用RGBA顏色模式,第五個采用24位真彩色,即1.67千萬種顏色,如果是256色系統(tǒng)則自動實現(xiàn)顏色抖動;因為沒有使用alpha緩存和累積緩存,所以從變量cAlphaBits到cAccumAlphaBits都設(shè)置為0;深度緩存設(shè)置為32位,這個緩存能解決三維場景的消隱問題;變量cAuxBuffers設(shè)置為0,在WindowsNT下不支持輔助緩存;WindowsNT下針對OpenGL變量ilayerType只能設(shè)置為PFD-MAIN-PLANE,但其他平臺也許支持PFD-OVERLAY-PLANE或PFD-UNDERLA

Y-PLANE;接下來bReserved變量只能設(shè)為0,而最后三個變量WindowsNT都不支持,故全設(shè)置成0。

(3)設(shè)置像素格式

當(dāng)初始化PIXELFORMATDESCRIPTOR結(jié)構(gòu)后,就要設(shè)置像素格式。下面幾段從VC++2.0的MFC程序中摘出的代碼就是設(shè)置像素格式的方式。代碼如下:

CClientDCclientDC(this);

intpixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);

BOOLresult=SetPixelFormat(clientDC.m-hDC,pixelFormat,&p

fd);

第一行語句說明得到一個應(yīng)用窗口客戶區(qū)的設(shè)置描述表。

第二行調(diào)用ChoosePixelFormat()選擇一個像素格式,并將像素格式索引號返回給pixelFormat變量;函數(shù)中第一個參數(shù)是選擇像素格式的設(shè)置描述表的句柄,第二個參數(shù)是PIXELFORMATDESCRIPTOR結(jié)構(gòu)的地址。如果調(diào)用失敗則返回0;否則返回像素格式索引號。

第三行調(diào)用SetPixelFormat()設(shè)置像素格式,三個參數(shù)分別是設(shè)備描述表的句柄、像素格式索引號和PIXELFORMATDESCRIPTOR結(jié)構(gòu)的地址。如果調(diào)用成功則返回TURE;否則返回FALSE。

3.創(chuàng)建圖形操作描述表

正如前所述,必須創(chuàng)建圖形操作描述表并啟用它后,才能調(diào)用OpenGL函數(shù)在窗口內(nèi)進行各種圖形操作。一般說來,利用MFC中增補的管理圖形操作描述表方法來編程比較方便。下面舉一例:

intCopenglView::OnCreate(LPCREATESTRUCTlpCreateStruct

)

{

if(CView::OnCreate(lpCreateStruct)==-1)return-1;

//TODO:Addyourspecializedcreationcodehere

PIXELFORMATDESCRIPTORpfd=

{

sizeof(PIXELFORMATDESCRIPTIOR),

//structuresizel,

//structureversionnumber

PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//propertyflags

PFD-TYPE-RGBA,//RGBAmode

24,//24bitcolor

0,0,0,0,0,0,//notconcernedwiththese

0,0,0,0,0,0,0,//noalphaoraccumbuffer

32,//32bitdepthbuffer

0,0,//nostencilorauxbuffer

PFD-MAIN-PLANE,//mainlayertype

0,//reserved

0,0,0//unsupported

};

CClientDCclientDC(this);

intpixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);

BOOLresult=SetPixelFormat(clientDC.m-hDC,pixelFormat,&p

fd);

m-hRC=wglCreateContext(clientDC.m-hRC);

return0;

}

voidCOpenglView::onDraw(CDC*pDC)

{

COpenglDoc*pDoc=GetDocument();

ASSERT-VAILD(pDoc);

//TODO:adddrawcodefornativedatahere

wglMakeCurrent(pDC->m-hDC,m-hDC);

DrawMyOpenGL();

wglMakeCurrent(pDC->m-hDC,NULL);

}

voidCOpenglView::OnDestroy()

{

CView::OnDestroy();

//TODO:Addyourmessagehandlercodehere

wglDeleteContext(m-hRC);

}

篇10

微機UNIX直接視頻圖形程序設(shè)計有兩種方法,一種是利用設(shè)備驅(qū)動程序(見參考文獻1),另一種是針對IBM標準終端進行編程,本文介紹后者。

一、圖形程序設(shè)計

1.檢測視頻適配器

視頻顯示器是由視頻適配器硬件控制的,視頻適配器決定了圖形方式下顯示圖形的分辨率及可能的顏色[2]。利用系統(tǒng)調(diào)用ioctl中的CONS-CURRENT命令可以檢測到當(dāng)前的視頻適配器,即:

ioctl(0,CONS-CURRENT,NULL)

返回-1時表示出錯,即沒有相應(yīng)的視頻適配器硬件,如果檢測到VGA卡則返回值為VGA,如果檢測到EGA卡則返回值為EGA,……。

2.初始化圖形系統(tǒng)

初始化圖形必須完成下列任務(wù)。

(1)獲取當(dāng)前的視頻顯示方式

ioctl的CONS-GET命令用來判斷當(dāng)前適配器的顯示方式,即:

ioctl(0,CONS-GET,NULL)

它返回顯示方式的值,這些值在包含文件vtkd.h中均有定義,如:SW-VAG640x480C為VGA適配器設(shè)置成640x480分辨率彩色圖形模式。

(2)設(shè)置圖形模式

直接將圖形模式值放入ioctl中的命令項即可設(shè)置相應(yīng)的圖形模式,如ioctl(0,SW-VGA640x480C,NULL)

將VGA適配器設(shè)置成640x480分辨率的彩色圖形模式。

(3)獲取圖形模式下視頻緩沖區(qū)物理地址

利用ioctl的MAPCONS命令可以實現(xiàn)此功能,即:

char*scrnmem;

scrnmem=(char*)ioctl(0,MAPCONS,NULL)

所有實現(xiàn)基本圖素的操作都將針對scrnmem進行,scrnmem就是EGA/VGA相應(yīng)的四個位平面的重疊地址,有關(guān)EGA/VGA的結(jié)構(gòu)可參閱[2]。

3.實現(xiàn)基本圖素

DOS操作系統(tǒng)下,對EGA/VGA的各種視頻I/O寄存器進行操作是很方便的,可以直接使用匯編語言in和out指令進行讀寫。然而,UNIX操作系統(tǒng)下,對物理硬件的訪問都是由UNIX系統(tǒng)核心和設(shè)備驅(qū)動程序管理的,要訪問EGA/VGA的各種I/O寄存器,必須獲得對其訪問的特權(quán),為了實現(xiàn)這種功能要求,可以使用下列ioctl系統(tǒng)調(diào)用方式:

ioctl(0,VGA-IOPRIVL,1)獲取VGA的各種I/O寄存器的訪問特權(quán)

ioctl(0,EGA-IOPRIVL,1)獲取EGA的各種I/O寄存器的訪問特權(quán)

UNIX操作系統(tǒng)基本上是采用C語言編寫的,只是在低層的系統(tǒng)內(nèi)核方面才使用低級的匯編語言,遵循這一原則,對EGA/VGA的I/O寄存器的訪問可以采用匯編語言,而實現(xiàn)圖形系統(tǒng)的基本圖素則采用C語言。

如果用戶的UNIX系統(tǒng)中已有inb()和outb()函數(shù)(嵌入在/usr/include/sys/inline.h中),則可以直接使用它們完成對各種I/O寄存器的讀寫,否則,必須編寫下列低級匯編語言例程:

/*向一端口輸出一字節(jié)*/

/*從一端口輸入一字節(jié)*/

voidoutb(intport,ucharvalue)

{

-asmpushedx

-asmmovedx,port

-asmmoval,value

-asmoutdx,al

-asmpopedx

}

ucharinb(intport)

{

-asmpushedx

-asmmovedx,port

-asminal,dx

-asmpopedx

}

基本圖素一般包括:設(shè)置顏色,對調(diào)色板的操作,畫點、線、弧、矩形、圓、橢圓、多邊形、畫扇形、餅圖,任意圖形填充,多邊形填充,保存屏幕,恢復(fù)屏幕等,這些操作均可用C語言實現(xiàn),細節(jié)問題可參閱[2]。

4.關(guān)閉圖形系統(tǒng)

退出圖形系統(tǒng)之前必須恢復(fù)EGA/VGA各I/O寄存器的值,并將顯示模式恢復(fù)到進入圖形模式之前的模式。采用下列ioctl調(diào)用實現(xiàn):

ioctl(0,MODESWITCH|oldmode,NULL)

oldmode是進入圖形方式之前獲取的方式,UNIX系統(tǒng)中,獲取的方式和設(shè)置的方式之間的關(guān)系為:

設(shè)置方式值=獲取方式值|MODESWITCH

二、虛擬終端的使用

虛擬終端(VirtualTerminal,簡稱VT)加強了UNIX系統(tǒng)V/386的接口功能,它不僅允許單個用戶開發(fā)一個圖形應(yīng)用軟件,而且允許多用戶、多道程序在同一個物理終端上運行,在開始一個用戶的應(yīng)用程序之前不必停止另一個應(yīng)用程序,而且各個用戶之間可以互相切換。

虛擬終端有兩種操作方式[1],一種是自動操作方式(VT-AUTO),這是默認情況,比較簡單,應(yīng)用程序并不了解終端用戶接受或放棄當(dāng)前VT的請求,這意味著被切換掉的進程的任何輸入輸出都可能丟失。另一種方式是進程控制方式(VT-PROCESS),該方式支持應(yīng)用程序與其它正在使用VT的進程之間同步,應(yīng)用程序可以負責(zé)接受或放棄使用VT。

[1]中介紹了以進程方式控制VT的過程,并以設(shè)備驅(qū)動程序方式介紹了接受和放棄對VT控制的信號處理例程。本文給出針對IBM標準終端編制VT的程序和相應(yīng)的信號處理例程。

/*設(shè)置虛擬終端*/

voidsetvirtualterm(void)

{

structvt-modevtmode;

signal(SIGUSR1,release-disp);//release-disp為放棄VT的信號處理例程

signal(SIGUSR2,acquire-disp);//acquire-disp為接受VT的信號處理例程

vtmode.mode=VT_PROCESS;//設(shè)置進程控制方式

vtmode.relsig=SIGUSR1;

vtmode.acqsig=SIGUSR2;

if(ioctl(0,VT-SETMODE,&vtmode)==-1)exit(1);//出錯即終止此進程

}

/*放棄VT的信號處理例程*/

voidrelease-disp(void)

{

signal(SIGUSR1,release-disp);

保存整個圖形屏幕于內(nèi)部緩沖區(qū)videobuf中;

ioctl(0),MODESWITCH|oldmode,NULL);

//oldmode為進入圖形模式之前的顯示方式

ioctl(0,VT-RELDISP,VT-TRUE);

//VT-TRUE表明同意放棄VT,如果此項為0,則表示拒絕放棄VT.

}

/*接受VT的信號處理例程*/

voidacquire-disp(void)

{

signal(SIGUSR2,acquire-disp);

ioctl(0,newmode,NULL);//newmode為應(yīng)用程序所處的圖形模式

scrnmem=(char*)ioctl(0,MAPCONS,NULL);

//重新獲取圖形緩沖區(qū)的物理地址

從videobuf中恢復(fù)整個圖形屏幕,并釋放videobuf;

ioctl(0,VT-RELDISP,VT-ACKACQ);//VT-ACKACQ表明接受VT

}

在微機UNIX操作系統(tǒng)下,針對EGA/VGA進行直接視頻程序設(shè)計,獨立開發(fā)一個圖形程序包,不僅小巧方便,而且可以重用以前在DOS下開發(fā)的圖形應(yīng)用程序。筆者在SCOUNIX系統(tǒng)下開發(fā)了一個小的低層圖形軟件包,許多以前的DOS圖形應(yīng)用程序都可以移植到UNIX系統(tǒng)下來。

另外,本文介紹的程序在使用前還應(yīng)包含下列文件,即:

#include<stdio.h>

#include<sys/types.h>

#include<sys/console.h>

#include<sys/vtkd.h>

#include<termio.h>

#include<sys/signal.h>

分配空間時還應(yīng)加上#include<malloc.h>