




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、? 嵌入式WinCE系統(tǒng)開發(fā) ?實(shí) 驗(yàn) 指 導(dǎo) 書張小進(jìn) 編 寫適用專業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)閩江學(xué)院 計(jì)算機(jī)科學(xué) 系2021年 7月前 言嵌入式C語言設(shè)計(jì)實(shí)驗(yàn)由驗(yàn)證性實(shí)驗(yàn)一、WinCE 平臺(tái)的構(gòu)建與配置,驗(yàn)證性實(shí)驗(yàn)二、線程同步調(diào)試實(shí)驗(yàn),驗(yàn)證性實(shí)驗(yàn)三驅(qū)動(dòng)程序結(jié)構(gòu)實(shí)驗(yàn),驗(yàn)證性實(shí)驗(yàn)四IO接口控制實(shí)驗(yàn),驗(yàn)證性實(shí)驗(yàn)五動(dòng)態(tài)鏈接庫實(shí)驗(yàn),驗(yàn)證性實(shí)驗(yàn)六UDP和Ping實(shí)驗(yàn),綜合性實(shí)驗(yàn)七CAN總線實(shí)驗(yàn)構(gòu)成,通過實(shí)驗(yàn)應(yīng)到達(dá)以下要求:1.熟悉嵌入式WinCE系統(tǒng)開發(fā)平臺(tái)的搭建,PB集成環(huán)境的使用。掌握Windows CE 內(nèi)核的配置、編譯方法;掌握構(gòu)建一個(gè)適合特定開發(fā)平臺(tái)的Windows CE 系統(tǒng)方法;為后續(xù)的其它
2、實(shí)驗(yàn)打下根底。2.加深對(duì)嵌入式WinCE系統(tǒng)的認(rèn)識(shí),了解WinCE 下IO 訪問機(jī)制和原理;掌握WinCE 線程編程方法;掌握線程同步原理和實(shí)現(xiàn)線程同步的方法;進(jìn)一步熟悉VS.Net 的使開發(fā)環(huán)境;能較熟練地進(jìn)行嵌入式WinCE的程序設(shè)計(jì)。3.熟悉嵌入式WinCE系統(tǒng)驅(qū)動(dòng)程序的結(jié)構(gòu), 了解驅(qū)動(dòng)程序的原理和功能;掌握流式接口驅(qū)動(dòng)程序的結(jié)構(gòu);掌握編寫流式接口的驅(qū)動(dòng)程序的方法;能根據(jù)實(shí)驗(yàn)內(nèi)容的要求進(jìn)行驗(yàn)證性的編程實(shí)驗(yàn)以掌握驅(qū)動(dòng)程序的框架結(jié)構(gòu)。4. 掌握在Windows CE 下訪問硬件I/O 存放器的一般方法;了解WinCE 下IO 訪問機(jī)制和原理;了解數(shù)碼管(LED)的顯示及控制原理;能根據(jù)實(shí)驗(yàn)內(nèi)
3、容的要求進(jìn)行驗(yàn)證性的編程實(shí)驗(yàn)以掌握I/O接口控制方法。5. 了解WinCE 動(dòng)態(tài)鏈接庫的根本原理;掌握WinCE 動(dòng)態(tài)鏈接庫程序的編程方法;掌握采用靜態(tài)和動(dòng)態(tài)調(diào)用動(dòng)態(tài)鏈接庫方法;能根據(jù)實(shí)驗(yàn)內(nèi)容的要求進(jìn)行驗(yàn)證性的編程實(shí)驗(yàn)以掌握動(dòng)態(tài)鏈接庫的實(shí)現(xiàn)技術(shù)和使用方法。6. 了解UDP 網(wǎng)絡(luò)通信的根本內(nèi)容;掌握PING 實(shí)現(xiàn)的根本原理;了解TCP/IP 和ICMP 協(xié)議;能根據(jù)實(shí)驗(yàn)內(nèi)容的要求進(jìn)行驗(yàn)證性的編程實(shí)驗(yàn)以掌握嵌入式WinCE下的網(wǎng)絡(luò)通信。7. 了解串口通信的根本原理;掌握串口編程的方法;掌握應(yīng)用程序的GUI編程;能根據(jù)實(shí)驗(yàn)內(nèi)容的要求進(jìn)行綜合性的編程實(shí)驗(yàn)以初步掌握串口通信的應(yīng)用。8由于這門課程的實(shí)驗(yàn)需
4、要大量的時(shí)間練習(xí),但受實(shí)驗(yàn)課時(shí)的限制需要學(xué)生課外補(bǔ)足16到24學(xué)時(shí),因此要求學(xué)生在實(shí)驗(yàn)前先預(yù)習(xí)實(shí)驗(yàn)內(nèi)容并根據(jù)實(shí)驗(yàn)大綱的說明先期做好實(shí)驗(yàn)的準(zhǔn)備工作。本指導(dǎo)書對(duì)綜合性實(shí)驗(yàn)只給出設(shè)計(jì)的要求和指標(biāo)不給實(shí)驗(yàn)源代碼,由學(xué)生自己設(shè)計(jì)、編譯、調(diào)試并運(yùn)行;通過實(shí)驗(yàn)結(jié)果理解嵌入式WinCE驅(qū)動(dòng)程序的實(shí)現(xiàn)方法;在實(shí)驗(yàn)報(bào)告中答復(fù)思考題。目 錄 TOC o 1-3 u 實(shí)驗(yàn)一 Windows CE 平臺(tái)的構(gòu)建與配置 PAGEREF _Toc267067844 h 5實(shí)驗(yàn)二 線程同步調(diào)試實(shí)驗(yàn) PAGEREF _Toc267067845 h 27實(shí)驗(yàn)三 驅(qū)動(dòng)程序結(jié)構(gòu)實(shí)驗(yàn) PAGEREF _Toc267067846 h 38
5、實(shí)驗(yàn)四 I/O接口控制實(shí)驗(yàn) PAGEREF _Toc267067847 h 52實(shí)驗(yàn)五 動(dòng)態(tài)鏈接庫實(shí)驗(yàn) PAGEREF _Toc267067848 h 61實(shí)驗(yàn)六 UDP 和Ping 實(shí)驗(yàn) PAGEREF _Toc267067849 h 70實(shí)驗(yàn)七 串口測試綜合實(shí)驗(yàn) PAGEREF _Toc267067850 h 80實(shí)驗(yàn)一 Windows CE 平臺(tái)的構(gòu)建與配置實(shí)驗(yàn)學(xué)時(shí):2實(shí)驗(yàn)類型:驗(yàn)證實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康?、掌握Windows CE 內(nèi)核的配置、編譯方法;2、掌握構(gòu)建一個(gè)適合特定開發(fā)平臺(tái)的Windows CE 系統(tǒng)方法;3、熟悉Platform Builder 開發(fā)工具使用方法。二、
6、實(shí)驗(yàn)內(nèi)容1、安裝XSBase270 實(shí)驗(yàn)開發(fā)平臺(tái)的BSP;2、根據(jù)XSBase 目標(biāo)平臺(tái)的特點(diǎn)和系統(tǒng)的需要,配置Windows CE 操作系統(tǒng)的特性和功能;3、編譯、鏈接操作系統(tǒng)內(nèi)核,生成系統(tǒng)映象文件;4、下載并運(yùn)行編譯好的Windows CE 系統(tǒng)。三、實(shí)驗(yàn)原理、方法和手段1、Windows CE 操作系統(tǒng)簡介Microsoft Windows CE 是一個(gè)開放的、可裁剪的、32 位的實(shí)時(shí)嵌入式窗口操作系統(tǒng)。和其他桌面窗口操作系統(tǒng)Windows XP/2000相比,它具有可靠性好、實(shí)時(shí)性高、內(nèi)核體積小等特點(diǎn),適用于各種嵌入系統(tǒng)和產(chǎn)品。它擁有多線程、多任務(wù)、確定性的實(shí)時(shí)、完全搶先式優(yōu)先級(jí)的操作
7、系統(tǒng)環(huán)境,專門面向只有有限資源的嵌入式硬件系統(tǒng)。同時(shí),開發(fā)人員可以根據(jù)特定硬件系統(tǒng)對(duì)Windows CE 操作系統(tǒng)進(jìn)行裁剪、定制,所以目前Windows CE 被廣泛用于各種嵌入式智能設(shè)備的開發(fā),是當(dāng)今應(yīng)用最多、增長最快的嵌入式操作系統(tǒng)。Windows CE 被設(shè)計(jì)成為一種高度模塊化的操作系統(tǒng),每一模塊都提供特定的功能,這些模塊中的一局部被劃分成組件,系統(tǒng)設(shè)計(jì)者可以根據(jù)設(shè)備的性質(zhì)只選擇那些必要的模塊或模塊中的組件包含進(jìn)操作系統(tǒng)映像,從而使Windows CE 變得非常緊湊只占不到200 KB的RAM,因此只占用了運(yùn)行設(shè)備所需的最小的ROM、RAM 以及其它硬件資源。Windows CE 被分成
8、不同的模塊,其中最主要的模塊有內(nèi)核模塊Kernel、對(duì)象存儲(chǔ)模塊、圖形窗口事件子系統(tǒng)GWES模塊以及通信Communication模塊。另外Windows CE還包含一些附加的可選擇模塊,這些模塊可支持的任務(wù)有管理可安裝設(shè)備驅(qū)動(dòng)程序、支持COM 等。一個(gè)最小的Windows CE 系統(tǒng)至少由內(nèi)核和文件系統(tǒng)模塊組成。1.1 內(nèi)核模塊內(nèi)核模塊是Windows CE 操作系統(tǒng)的核心,它為任何基于Windows CE 的設(shè)備提供處理器調(diào)度、內(nèi)存管理、異常處理以及系統(tǒng)內(nèi)通信等系統(tǒng)功能,并為應(yīng)用程序使用這些核心功能提供內(nèi)核效勞。Windows CE 的內(nèi)核模塊通過CoreDLL 模塊表示。所有的操作系統(tǒng)定
9、制設(shè)計(jì)都必須包含這個(gè)模塊,但并不是這個(gè)模塊的所有組件都必需的,有一些內(nèi)核組件是可選的。1.2 對(duì)象存儲(chǔ)對(duì)象存儲(chǔ)是Windows CE 的默認(rèn)文件系統(tǒng),它相當(dāng)于Windows CE 設(shè)備上的硬盤。對(duì)象存儲(chǔ)是由共享一個(gè)內(nèi)核堆的文件系統(tǒng)、系統(tǒng)數(shù)據(jù)庫和系統(tǒng)注冊(cè)表組成,即使在沒有系統(tǒng)主電源時(shí),對(duì)象存儲(chǔ)也能維持應(yīng)用程序及相關(guān)數(shù)據(jù)不會(huì)喪失。對(duì)象存儲(chǔ)可將用戶數(shù)據(jù)和應(yīng)用程序數(shù)據(jù)存入文件或注冊(cè)器。在操作系統(tǒng)創(chuàng)立進(jìn)程該進(jìn)程中只包括那些必需選項(xiàng)的過程中,對(duì)于這些不同的對(duì)象存儲(chǔ)組件,可以選取,也可以忽略。1.3 圖形窗口和事件系統(tǒng)模塊圖形窗口和事件系統(tǒng)模塊GWES包含大局部的核心Windows CE 功能,它集成了圖形
10、設(shè)備接口GDI、窗口管理器和事件管理器。GWES 模塊時(shí)Windows CE 操作系統(tǒng)高度組件化的局部,它分別由USER 和GDI 兩_局部組成,USER 用來處理消息、事件及鼠標(biāo)和鍵盤等用戶輸入,而GDI 用于處理圖形的屏幕和打印輸出等。GWES 是用戶、應(yīng)用程序和操作系統(tǒng)之間的圖形用戶接口。GWES 通過處理鍵盤、鼠標(biāo)動(dòng)作與用戶交互,并選擇傳送到應(yīng)用程序和操作系統(tǒng)的信息。GWES 通過創(chuàng)立并管理在顯示設(shè)備和打印機(jī)上顯示的窗口、圖形以及文本來處理輸出。GWES 的中心是窗口。所有應(yīng)用程序都通過窗口接收來自操作系統(tǒng)的消息,即使那些為缺少圖形顯示的設(shè)備創(chuàng)立的應(yīng)用程序也是如此。GWES 提供控制器
11、、菜單、對(duì)話框以及圖形顯示的設(shè)備資源,還提供GDI 以控制文本與圖形顯示。1.4 通信模塊通信模塊為基于Windows CE 的設(shè)備提供有線或無線通信能力,使Windows CE 設(shè)備能夠與其他設(shè)備或計(jì)算機(jī)進(jìn)行連接與通信,通信組件提供對(duì)以下通信硬件和數(shù)據(jù)協(xié)議的支持: 串行I/O 支持 遠(yuǎn)程訪問效勞RAS 傳輸控制協(xié)議/ Internet 協(xié)議(TCP/IP) 局域網(wǎng)LAN 技術(shù)API TAPI WinCE 的無線效勞可選組件除上述主要模塊之外,還可使用其它的操作系統(tǒng)模塊。這些模塊與組件主要有: 設(shè)備管理器和設(shè)備驅(qū)動(dòng)程序 多媒體聲音支持模塊 COM 支持模塊 WinCE 外殼模塊WinCE 提供
12、的每一模塊或組件都支持一組可用的相關(guān)API 函數(shù)。2 Platform Builder 開發(fā)工具介紹Platform Builder(PB)是微軟提供應(yīng)Windows CE 開發(fā)人員進(jìn)行基于Windows CE 平臺(tái)下嵌入式操作系統(tǒng)定制的集成開發(fā)環(huán)境。它提供了所有進(jìn)行設(shè)計(jì)、創(chuàng)立、編譯、測試和調(diào)試Windows CE 操作系統(tǒng)平臺(tái)的工具。它運(yùn)行在桌面Windows 下,開發(fā)人員可以通過交互式的環(huán)境來設(shè)計(jì)和定制內(nèi)核、選擇系統(tǒng)特性,然后進(jìn)行編譯和調(diào)試。該工具能夠根據(jù)用戶的需求,選擇構(gòu)建具有不同內(nèi)核功能的CE 系統(tǒng)。同時(shí),它也是一個(gè)集成的編譯環(huán)境,可以為所有CE 支持的CPU 目標(biāo)代碼編譯C/C+程序
13、。一旦成功地編譯了一個(gè)CE 系統(tǒng),就會(huì)得到一個(gè)名為nk.bin 的映像文件。將該文件下載到目標(biāo)板中,就能夠運(yùn)行CE 了。Platform Builder 提供了開發(fā)人員快速建立基于Windows CE 嵌入式系統(tǒng)所需的各種工具。Platform Builder 的集成開發(fā)環(huán)境IDE允許開發(fā)人員配置、建立并調(diào)試能夠借助Windows和Web 強(qiáng)大功能為嵌入式系統(tǒng)帶來靈活性與可靠性的新一代高度模塊化設(shè)計(jì)方案。Platform Builder 提供的主要特性包括:平臺(tái)開發(fā)向?qū)latform Wizard和BSP 開發(fā)向?qū)В洪_發(fā)向?qū)в糜谝龑?dǎo)開發(fā)人員區(qū)創(chuàng)立一個(gè)簡單的系統(tǒng)平臺(tái)或BSP板級(jí)支持軟件包,然后
14、再根據(jù)要求進(jìn)一步修改。開發(fā)向?qū)岣吡似脚_(tái)和BSP 創(chuàng)立效率;特性目錄Catalog:操作系統(tǒng)可選特性均在特性目錄Catalog中列出,開發(fā)人員可以選擇相應(yīng)的特性來定制操作系統(tǒng);導(dǎo)出向?qū)xport Wizard??梢韵蚱渌鸓latform Builder 用戶導(dǎo)出自定義的目錄Catalog特性;導(dǎo)出SDK 向?qū)xport SDK Wizard:使用戶可以導(dǎo)出一個(gè)自定義的軟件開發(fā)工具包SDK,可以將客戶定制的SDK 導(dǎo)出到特定的開發(fā)環(huán)境中如EVC。遠(yuǎn)程工具:可以執(zhí)行同基于Windows CE 的目標(biāo)設(shè)備有關(guān)的各種調(diào)試任務(wù)和信息收集任務(wù);仿真器Emulator:通過硬件仿真加速和簡化了系統(tǒng)的開發(fā)
15、,使用戶可以在開發(fā)工作站上對(duì)平臺(tái)和應(yīng)用程序進(jìn)行調(diào)試,大大簡化了系統(tǒng)的開發(fā)流程,縮短了開發(fā)時(shí)間。應(yīng)用程序調(diào)試器:可以在自定義的操作系統(tǒng)映像上對(duì)應(yīng)用程序進(jìn)行調(diào)試;內(nèi)核調(diào)試器:可以對(duì)自定義的操作系統(tǒng)映像進(jìn)行調(diào)試,并且向用戶提供有關(guān)映像性能的信息;驅(qū)動(dòng)測試工具包Windows CE.net Test Kit:系統(tǒng)為驅(qū)動(dòng)程序開發(fā)提供了根本的測試工具集;根底配置:為各種流行的設(shè)備類別預(yù)置的可操作系統(tǒng)根底平臺(tái),為自定義操作系統(tǒng)的創(chuàng)立提供了一個(gè)起點(diǎn)。Platform Builder 的開發(fā)界面如圖1-1 所示。圖1-1 Platform Builder 開發(fā)界面3BSP 原理簡述BSP 又稱板級(jí)支持軟件包,它
16、是一個(gè)包括啟動(dòng)程序、OEM 適配層程序OAL、標(biāo)準(zhǔn)開發(fā)板SDB和相關(guān)硬件設(shè)備驅(qū)動(dòng)程序的軟件包。BSP 是基于Windows CE 平臺(tái)系統(tǒng)的主要局部,它是由一些源碼和二進(jìn)制文件組成。對(duì)于嵌入式系統(tǒng)來說,它沒有像PC 機(jī)那樣具有廣泛使用的各種工業(yè)標(biāo)準(zhǔn),各種嵌入式系統(tǒng)的不同應(yīng)用需求決定了它選用的各自定制的硬件環(huán)境,這種多變的硬件環(huán)境決定了無法完全由操作系統(tǒng)來實(shí)現(xiàn)上層軟件與底層硬件之間的無關(guān)性。因此各種商用實(shí)時(shí)操作系統(tǒng)都采用了分層設(shè)計(jì)的方法,它將系統(tǒng)中與硬件直接相關(guān)的一層軟件獨(dú)立出來,稱之為BoardSupport Package(板級(jí)支持軟件包,簡稱BSP)。顧名思義,BSP 是針對(duì)某個(gè)單板而設(shè)計(jì)
17、的,它對(duì)于用戶(開發(fā)者)是開放的,用戶可以根據(jù)不同的硬件需求對(duì)其作改動(dòng)或二次開發(fā),而操作系統(tǒng)本身僅僅提供了CPU 內(nèi)核的無關(guān)性。BSP 在系統(tǒng)中的角色,很相似于BIOS 在PC 統(tǒng)中的地位。BSP 在系統(tǒng)中所處的位置,如圖1-2 所示,它位于硬件平臺(tái)與操作系統(tǒng)或應(yīng)用軟件之間,用于屏蔽上層軟件對(duì)各種硬件的相關(guān)性。圖1-2 BSP 在系統(tǒng)中的位置BSP 的主要功能在于配置系統(tǒng)硬件使其工作在正常狀態(tài),并且完成硬件與軟件之間的數(shù)據(jù)交互,為OS 及上層應(yīng)用程序提供一個(gè)與硬件無關(guān)的軟件平臺(tái)。在Platform Builder 中,微軟提供了對(duì)十幾中標(biāo)準(zhǔn)開發(fā)板SDB支持的BSP,這些BSP 覆蓋了所有Win
18、dows CE 可支持的處理器類型,它可使開發(fā)者快速地評(píng)估各種操作系統(tǒng)特性并減少新產(chǎn)品開發(fā)時(shí)間。四、實(shí)驗(yàn)組織運(yùn)行要求根據(jù)本實(shí)驗(yàn)的特點(diǎn)、要求和具體條件,采用以學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)。重點(diǎn):Windows CE 內(nèi)核的配置、編譯方法;構(gòu)建特定開發(fā)平臺(tái)的WinCE系統(tǒng)方法;熟悉Platform Builder 開發(fā)工具使用方法。難點(diǎn):構(gòu)建特定開發(fā)平臺(tái)的WinCE系統(tǒng)方法五、實(shí)驗(yàn)條件裝有WinCE、XScale PXA270開發(fā)環(huán)境和VS的PC機(jī)或虛擬機(jī)六、實(shí)驗(yàn)步驟1、安裝XSBase270 的BSP為了使Platform Builder支持XSBase270 開發(fā)板的硬件資源系統(tǒng),在安裝
19、Windows CE 之后需要安裝XSBase270 的板級(jí)支持軟件包BSP。具體安裝步驟:雙擊隨開發(fā)板提供的BSP 安裝文件,進(jìn)入BSP 安裝向?qū)鐖D1-3 所示。圖1-3 XSBase270 BSP 安裝向?qū)О础癗ext按鈕,進(jìn)入安裝過程,BSP 自動(dòng)選擇Windows CE 安裝目錄D:WINCE500,如圖1-4 所示。圖1-4 BSP 安裝目錄界面按“Install按鈕,進(jìn)行BSP 的安裝。如圖1-5 所示。圖1-5 BSP 安裝過程界面BSP 安裝完成后,安裝向?qū)崾景惭b完成界面,按“Finish按鈕,完成BSP 的安裝。如圖1-6 所示。圖1-6 BSP 安裝完成界面XSBase
20、270 的BSP 安裝完成后,啟動(dòng)Platform Builder,在Platform Builder 的特性目錄區(qū)(Catalog)的第三方BSPThird Party節(jié)點(diǎn)下出現(xiàn)所安裝的XSBase270 的BSPEmdoor System XSBase270:ARMV4I,如圖1-7 所示。圖1-7 Platform Builder 中XSBase270 的BSP2、實(shí)驗(yàn)平臺(tái)的配置第一步:新建一個(gè)目標(biāo)平臺(tái):a) 選擇菜單項(xiàng)“File -“New Platform Wizard.;b) 輸入目標(biāo)平臺(tái)名稱和保存的位置,如圖1-8所示圖1-8 目標(biāo)平臺(tái)名稱和保存路徑界面c) 為目標(biāo)平臺(tái)選擇所支持
21、的BSP,XSBase270開發(fā)板選擇選擇“EMDOOR SYSTEM XSBASE270:ARMV4I 平臺(tái),如圖1-9所示;圖1-9 BSP 選擇界面d) 為新建的目標(biāo)平臺(tái)選擇一個(gè)適宜的模板配置,如圖1-10所示;圖1-10 設(shè)計(jì)模板配置e) 在“Application & Media選擇有關(guān)特性本實(shí)驗(yàn)選那么默認(rèn)項(xiàng);如圖1-11所示圖1-11 Applications & Media 選擇界面f) 在“Networking & Communications中選擇可用特性默認(rèn)項(xiàng);如圖1-12所示圖1-12 Networking & Communications 配置界面g) 完成“New P
22、latform Wizard.,如圖1-13所示圖1-13 平臺(tái)配置完成界面第二步:平臺(tái)的配置a) 選擇菜單項(xiàng)“Platform“Setting。b) 在“Platform Settings對(duì)話框中設(shè)置“General選項(xiàng)卡。選中“Release,如圖1-14所示圖1-14 編譯類型設(shè)置c) 在“Platform Settings 對(duì)話框中設(shè)置“Build Options選項(xiàng)卡;針對(duì)該XSBase270開發(fā)板實(shí)驗(yàn)平臺(tái)的選項(xiàng)配置如圖1-15 所示圖1-15 編譯選項(xiàng)配置第三步:配置系統(tǒng)組件和特性如圖1-16 所示,左邊的workspace 區(qū)顯示的是所配置的WinCE 操作系統(tǒng)所具有的組件,右邊
23、的Catalog 區(qū)顯示的那么是PB 提供的能夠參加到WinCE 操作系統(tǒng)的所有組件。實(shí)驗(yàn)者可以在右邊的catalog 區(qū)中選擇自己需要的設(shè)備驅(qū)動(dòng)程序和功能組件。如果斷定要添加它到左邊的workspace 區(qū)以參加編譯,通過右擊選項(xiàng)再選擇“Add to OS Design。圖1-16 系統(tǒng)組件特性界面a) 添加XSBase270 實(shí)驗(yàn)平臺(tái)提供的設(shè)備驅(qū)動(dòng)程序XSBase270 實(shí)驗(yàn)平臺(tái)的驅(qū)動(dòng)程序由平臺(tái)BSP 提供,其中包括輸入設(shè)備Input Devices、網(wǎng)絡(luò)設(shè)備Networking、PC 卡PC Card、SD 卡、串口、觸摸屏、USB 設(shè)備等;另外還包括Emdoor OEM 驅(qū)動(dòng)程序主要包
24、括:CAN 總線驅(qū)動(dòng)、IDE 接口驅(qū)動(dòng)、LED 顯示驅(qū)動(dòng)、電機(jī)接口驅(qū)動(dòng)等。如果用戶想向新建平臺(tái)添加設(shè)備驅(qū)動(dòng)程序,通過右擊選項(xiàng)再選擇“Add to OS Design即可。如圖1-17 所示圖1-17 XSBase270 的BSP 提供的驅(qū)動(dòng)程序b) 添加系統(tǒng)功能組件系統(tǒng)的功能組件屬于平臺(tái)無關(guān)局部,由Platform Builder 開發(fā)環(huán)境統(tǒng)一提供。它們均是在Core Os 目錄下進(jìn)行添加,如圖1-17 所示。用戶可以根據(jù)實(shí)驗(yàn)的需要添加系統(tǒng)功能組件,本實(shí)驗(yàn)中添加以下系統(tǒng)功能組件: 添加數(shù)據(jù)同步的組件:Core OS Windows CE devices Applications-End Use
25、r ActiveSync File Sync; 圖片瀏覽器的添加:Core OS Windows CE devices Applications-End User FileViewers Microsoft Image Viewer 大的軟鍵盤組件的添加:Core OS Windows CE devices Shell and User Interface Software Input Panel Software-based Input Panel (SIP) (Choose 1 or more) SIP for Large Screens 文件系統(tǒng)的添加:Core OS Windows C
26、E devices File Systems and Data Store Storage Manager FAT File System; 配置信息保存模塊添加:Core OS Windows CE devices File Systems and DataStore Registry Storage (Choose 1) Hive-based Registry; CF 卡模塊的添加:Catalog Device Drivers Storage Devices Compact Flash /PC Card Storage (ATADISK) 添加無線CF 卡:Core OS Windows
27、CE devices Communication Servicesand Networking Networking - Local Area Network (LAN) Wireless LAN (802.11) EVC調(diào)試程序組件模塊的添加:Catalog Platform Manager Platform Manager圖1-18 添加系統(tǒng)功能組件3、平臺(tái)的編譯,構(gòu)建系統(tǒng),生成映像文件選擇菜單項(xiàng)Build OS Sysgen 對(duì)平臺(tái)進(jìn)行編譯如圖1-19 所示,如果沒出任何錯(cuò)誤,編譯完成后將生成一個(gè)系統(tǒng)映象文件,該文件被放在所建工程所保存的目錄下的/RelDir/工程名_ ARMV4I_R
28、elease 目錄下本實(shí)驗(yàn)的編譯后的映像文件NK.bin 保存在D:WINCE500PBWorkspacesxsbase270RelDirXSBase270_ARMV4I_Release 目錄下。具體編譯鏈接花費(fèi)的時(shí)間根據(jù)你的宿主機(jī)的速度和你所配置平臺(tái)的大小而定。一般需要2030分鐘。圖1-19 平臺(tái)的編譯4、代碼下載測試 超級(jí)終端的配置 超級(jí)終端的通信參數(shù)設(shè)置如圖1-20 所示圖1-20 超級(jí)終端設(shè)置啟動(dòng)目標(biāo)平臺(tái),超級(jí)終端顯示Boot Loader 配置選項(xiàng)如圖1-21,如果需要下載新的映像文件,那么第三項(xiàng)必須為:3DHCP:Disable,第五項(xiàng)必須為:5) Download new im
29、age at startup圖1-21 目標(biāo)板的Boot Loader 菜單配置選項(xiàng) Platform Builder 配置:選擇菜單項(xiàng)Target Connectivity Options 進(jìn)行連接選項(xiàng)配置,如圖1-22 所示。下載方式采用以太網(wǎng)下載,單擊“Settings按鈕,對(duì)以太網(wǎng)進(jìn)行配置,如圖1-22 所示。假設(shè)沒有接收到設(shè)備名:XSBASE2960 的話,檢查網(wǎng)線是否連接好,可以查看板子上,以太網(wǎng)端口旁的指示燈是否點(diǎn)亮。然后檢查XSBASE2960 的IP 是否跟你的PC 機(jī)在同一網(wǎng)段。圖1-22 目標(biāo)板連接配置圖1-23 下載以太網(wǎng)配置 下載測試選擇菜單項(xiàng)Target Attac
30、h Device,進(jìn)行設(shè)備連接,如果設(shè)備連接正常,Platform Builder 將編譯好的映像文件NK.bin 通過以太網(wǎng)下載到目標(biāo)板中,圖1-24 為Platform Builder下載進(jìn)程。圖1-24 映像文件下載進(jìn)程同時(shí)超級(jí)終端顯示映像文件下載情況,當(dāng)超級(jí)終端出現(xiàn)下面的字樣的時(shí)候,表示映像文件已經(jīng)下載到目標(biāo)板的Flash 存儲(chǔ)器中。FlashWrite: Saved end sector(s) First 0 x206 (Length=0 x1FA).FlashErase: Unlocking flash block(s) 0 x1, 0 x1 (please wait): Done
31、.Erasing flash block(s) 0 x1, 0 x1 (please wait): .Done.FlashWrite: Restored end sector(s) First 0 x206 (Length=0 x1FA).Writing to flash (please wait): Done.隨后斷電或按復(fù)位鍵重新啟動(dòng),并將超級(jí)終端的第5 項(xiàng)改為“Launch existing flashresident image at startup.然后按“L字母。系統(tǒng)將啟動(dòng)起來。七、思考題1、如何使用PB 編譯一個(gè)Mobile Handlheld 的平臺(tái)?2、請(qǐng)描述Platform
32、 Builder 的功能;3、如何確定組件已經(jīng)添加到PB 中?4、請(qǐng)編譯一個(gè)在PC 機(jī)仿真Emulator運(yùn)行的Windows CE 系統(tǒng)?八、實(shí)驗(yàn)報(bào)告1、實(shí)驗(yàn)預(yù)習(xí)在實(shí)驗(yàn)前每位同學(xué)都需要對(duì)本次實(shí)驗(yàn)進(jìn)行認(rèn)真的預(yù)習(xí),并寫好預(yù)習(xí)報(bào)告,在預(yù)習(xí)報(bào)告中要寫出實(shí)驗(yàn)?zāi)康?、要求,需要用到的儀器設(shè)備、物品資料以及簡要的實(shí)驗(yàn)步驟,形成一個(gè)操作提綱。對(duì)實(shí)驗(yàn)中的平安考前須知及可能出現(xiàn)的現(xiàn)象等做到心中有數(shù),但這些不要求寫在預(yù)習(xí)報(bào)告中。設(shè)計(jì)性實(shí)驗(yàn)要求進(jìn)入實(shí)驗(yàn)室前寫出實(shí)驗(yàn)方案,并經(jīng)指導(dǎo)教師審閱后實(shí)施。2、實(shí)驗(yàn)記錄學(xué)生開始實(shí)驗(yàn)時(shí),應(yīng)該將記錄本放在近旁,將實(shí)驗(yàn)中所做的每一步操作、觀察到的現(xiàn)象和所測得的數(shù)據(jù)及相關(guān)條件如實(shí)地記錄下來
33、。實(shí)驗(yàn)記錄中應(yīng)有指導(dǎo)教師的簽名。3、實(shí)驗(yàn)報(bào)告主要內(nèi)容包括對(duì)實(shí)驗(yàn)數(shù)據(jù)、實(shí)驗(yàn)中的特殊現(xiàn)象、實(shí)驗(yàn)操作的成敗、實(shí)驗(yàn)的關(guān)鍵點(diǎn)等內(nèi)容進(jìn)行整理、解釋、分析總結(jié),答復(fù)思考題,提出實(shí)驗(yàn)結(jié)論或提出自己的看法。實(shí)驗(yàn)二 線程同步調(diào)試實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí):2實(shí)驗(yàn)類型:驗(yàn)證實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康?、了解WinCE 下IO 訪問機(jī)制和原理;2、掌握WinCE 線程編程方法;3、掌握線程同步原理和實(shí)現(xiàn)線程同步的方法4、熟悉VS.Net 的開發(fā)環(huán)境;二、實(shí)驗(yàn)內(nèi)容1、了解在Windows CE 下線程編程方法;2、掌握利用線程同步實(shí)現(xiàn)線程同步的根本原理;3、掌握線程同步編程;4、掌握VS.net 編程方法三、實(shí)驗(yàn)原理、方法和手段1、
34、線程概述WinCE 是有優(yōu)先級(jí)的多任務(wù)操作系統(tǒng),它允許重功能、進(jìn)程在相同時(shí)間的系統(tǒng)中運(yùn)行,WinCE 支持最大的32 位同步進(jìn)程。一個(gè)進(jìn)程包括一個(gè)或多個(gè)線程,每個(gè)線程代表進(jìn)程的一個(gè)獨(dú)立局部,而一個(gè)線程被指定為進(jìn)程的根本線程。WinCE 以搶先方式來調(diào)度線程。線程以“時(shí)間片為單位來運(yùn)行,WinCE 的“時(shí)間片通常為25 毫秒。過來那個(gè)時(shí)間后,如果線程沒有放棄它的時(shí)間片,并且線程并不緊急,系統(tǒng)就會(huì)掛起線程并調(diào)度另一個(gè)線程來運(yùn)行。WinCE 將根據(jù)優(yōu)先級(jí)方法來決定要運(yùn)行的線程,高優(yōu)先級(jí)的線程將在低優(yōu)先級(jí)的線程前面調(diào)度。2、線程API 函數(shù)2.1 創(chuàng)立線程WinCE 提供了CreateThread 函
35、數(shù)來創(chuàng)立線程,其聲明如下:HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, /線程平安指針,不支持DWORD dwStackSize, /為自己所使用堆棧分配的地址空間大小,不支持LPTHREAD_START_ROUTINE lpStartAddress, /線程函數(shù)地址LPVOID lpParameter, /傳入線程函數(shù)的參數(shù)DWORD dwCreationFlags, /控制線程創(chuàng)立的附加標(biāo)志LPDWORD lpThreadId/新線程的ID 值);WinCE 不支持lpThreadAttributes 和dwSt
36、ackSize 參數(shù),將它們?cè)O(shè)置成NULL 和0 即可。lpStartAddress 指向線程函數(shù)的地址;lpParameter 被傳遞到線程中的參數(shù);dwCreationFlags線程創(chuàng)立參數(shù),可以設(shè)置成0 或CREATE_SUSPENDED,如果為0,表示線程立即執(zhí)行,如果參數(shù)為CREATE_SUSPENDED,那么被創(chuàng)立的線程將處于掛起狀態(tài),而且必須要調(diào)用ResumeThread 函數(shù)將其喚醒。2.2 掛起和恢復(fù)線程正在運(yùn)行的線程可以被掛起、暫停執(zhí)行。同他使用SuspendThead 函數(shù)即可實(shí)現(xiàn)以上功能,該函數(shù)的聲明如下:DWORD SuspendThread(HANDLE hThre
37、ad);參數(shù)hThead 代表要掛起線程的句柄。由于SuspendThread 函數(shù)的調(diào)用將增加掛起計(jì)數(shù),因此在實(shí)際調(diào)度線程運(yùn)行之前,對(duì)SuspendThread 函數(shù)的屢次調(diào)用必須與對(duì)ResumeThread 函數(shù)的屢次調(diào)用相匹配。ResumeThread 函數(shù)的定義DWORD ResumeThreadHANDLE hThread;參數(shù)hThead 同樣代表要恢復(fù)線程的句柄。3 線程同步在使用線程時(shí),會(huì)經(jīng)常遇到兩個(gè)概念,即線程沖突和線程死鎖。線程沖突:如果線程A 讀寫數(shù)據(jù)G,線程B 也正在讀取數(shù)據(jù)G,那么很顯然,該操作將導(dǎo)致數(shù)據(jù)沖突,引起數(shù)據(jù)混亂。這里需要使用同步技術(shù),以保證線程A 和線程B
38、 依次讀寫數(shù)據(jù)G,防止數(shù)據(jù)沖突。線程死鎖:例如A 工人為加工III 零件在等待B 提供的I 零件,而B 正好在等待應(yīng)由A加工提供的II 零件來裝配I 零件。由于他們之間再?zèng)]有其他的任何人幫助通信或其他通信手段。所以他們一直在等對(duì)方的零件而進(jìn)入死鎖狀態(tài)。死鎖屬于邏輯錯(cuò)誤,無法通過線程同步來解決。WinCE 實(shí)現(xiàn)線程同步的常用方法:事件Event、互斥Mutex、信號(hào)量Semaphore、臨界區(qū)CriticalSection。3.1 利用事件同步“事件對(duì)象是實(shí)現(xiàn)線程同步最根本的方法之一,一個(gè)事件對(duì)象可以處于“已標(biāo)示和“未標(biāo)示兩種狀態(tài),如果將事件對(duì)象設(shè)置為“已標(biāo)示狀態(tài),表示可以執(zhí)行同步操作,事件對(duì)象
39、處于“未標(biāo)示狀態(tài),那么表示需要等待事件對(duì)象變?yōu)椤耙褬?biāo)示狀態(tài)才可以進(jìn)行同步操作。下面介紹利用事件同步所需要的API 函數(shù)。1CreateEvent 函數(shù)。創(chuàng)立事件對(duì)象函數(shù)CreateEvent,其聲明如下:HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,/CE 不支持,設(shè)為NULLBOOLbManualReset, /設(shè)置是否手動(dòng)設(shè)置事件對(duì)象狀態(tài)BOOLbInitialState, /事件對(duì)象初始狀態(tài)LPTSTR lpName /事件對(duì)象名稱);參數(shù)bManualReset 表示是否手動(dòng)設(shè)置事件對(duì)象狀態(tài),當(dāng)其值為TRUE 時(shí),
40、在調(diào)用完等待函數(shù)WaitForSingObject,WaitForMutipleObject后,那么必須調(diào)用ResetEvent 函數(shù),以設(shè)置事件對(duì)象沒有被標(biāo)示,當(dāng)其值為FALSE 時(shí),系統(tǒng)調(diào)用完等待函數(shù),會(huì)自動(dòng)將事件對(duì)象設(shè)置為未標(biāo)示狀態(tài)。參數(shù)bInitialState 表示事件對(duì)象初始狀態(tài),當(dāng)其值為TRUE 是,事件對(duì)象初始化狀態(tài)為已標(biāo)示,當(dāng)其值為FALSE 時(shí),事件對(duì)象初始狀態(tài)為未標(biāo)示。如果創(chuàng)立事件函數(shù)對(duì)象CreateEvent 執(zhí)行成功,將返回事件對(duì)象句柄。假設(shè)失敗,那么返回0,在不用事件句柄時(shí),需要使用CloseHandle()將其關(guān)閉,以釋放資源。2SetEvent 函數(shù)和Reset
41、Event 函數(shù)。函數(shù)SetEvent的功能是將事件對(duì)象設(shè)置為已標(biāo)示狀態(tài)。該函數(shù)的聲明如下:BOOL SetEventHANDLE hEvent;參數(shù)hEvent 表示事件對(duì)象句柄。函數(shù)ResetEvent 函數(shù)功能將事件對(duì)象設(shè)置成未標(biāo)示狀態(tài),該函數(shù)的聲明如下:BOOL ResetEventHANDLE hEvent;(3) 使用事件同步的一般使用流程通常情況,在主線程中,用戶利用CreateEvent 函數(shù)創(chuàng)立一個(gè)事件對(duì)象,并且將參數(shù)bManualReset 設(shè)為FALSE,參數(shù)bInitialState 也設(shè)為FALSE,此時(shí)事件對(duì)象狀態(tài)未標(biāo)示。然后在線程里通過WaitForSingleO
42、bject 函數(shù)來等待事件被標(biāo)示。此時(shí),只要在主線程中調(diào)用SetEvent 函數(shù),將事件對(duì)象設(shè)置成已標(biāo)示。那么線程里的WaitForSingleObject 函數(shù)便會(huì)返回,繼續(xù)執(zhí)行,同時(shí)將事件對(duì)象狀態(tài)設(shè)置成未標(biāo)示。3.2 利用互斥同步互斥同步類似于事件對(duì)象同步?;コ馔揭矊?chuàng)立一個(gè)互斥對(duì)象,該互斥對(duì)象也有“被線程擁有和“不被線程擁有兩種狀態(tài);當(dāng)互斥對(duì)象處于“不被線程擁有狀態(tài),表示可以執(zhí)行相關(guān)操作;當(dāng)互斥對(duì)象處于“被線程擁有狀態(tài),表示此時(shí)不可以執(zhí)行相關(guān)操作。通過等待函數(shù)請(qǐng)求互斥對(duì)象實(shí)現(xiàn)同步。1CreateMutex 函數(shù)。通過CreateMutex 函數(shù)創(chuàng)立互斥對(duì)象,該函數(shù)定義如下:HANDLE
43、 CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, /CE 不支持BOOL bInitialOwner, /初始化擁有狀態(tài),TRUE 表示擁有,F(xiàn)ALSE 表示未被擁有LPCTSTR lpName /互斥名稱);如果創(chuàng)立互斥函數(shù)對(duì)象CreateMutex 執(zhí)行成功,將返回互斥對(duì)象句柄。假設(shè)失敗,那么返回ERROR_INVALID_HANDLE,在不用互斥句柄時(shí),需要使用CloseHandle()將其關(guān)閉,以釋放資源。2ReleaseMutex 函數(shù)。在使用等待函數(shù)請(qǐng)求互斥對(duì)象時(shí),如果請(qǐng)求到互斥對(duì)象的擁有權(quán),那么等待函數(shù)將自動(dòng)設(shè)置互斥對(duì)象狀
44、態(tài)為“未被擁有。ReleaseMutex 函數(shù)負(fù)責(zé)釋放某個(gè)線程對(duì)象互斥對(duì)象的擁有權(quán),也就是將互斥對(duì)象設(shè)置為“未被線程擁有狀態(tài)。ReleaseMutex函數(shù)定義如下:BOOL ReleaseMutex HANDLE hHandle;hHandle 表示互斥對(duì)象句柄;3利用互斥同步的一般使用流程利用互斥同步的一般使用流程是:首先利用CreateMutex 函數(shù)創(chuàng)立互斥對(duì)象,并將CreateMutex 中的參數(shù)bInitialOwer 設(shè)置為FALSE,使互斥對(duì)象處于“未被線程擁有狀態(tài)。然后利用WaitForObject 等待互斥對(duì)象,執(zhí)行相關(guān)操作。處理完成后,利用ReleaseMutex 函數(shù)釋放
45、線程對(duì)互斥對(duì)象的擁有權(quán)。當(dāng)所有線程執(zhí)行完畢后,需要使用CloseHandle()將其關(guān)閉。3.3 利用臨界區(qū)同步“臨界區(qū)是進(jìn)行線程同步的另一種方法,它能夠阻止兩個(gè)或多個(gè)不同的線程在同一時(shí)間內(nèi)訪問同一個(gè)代碼區(qū)域。它通過調(diào)用EnterCriticalSection 函數(shù)來指出已經(jīng)進(jìn)入代碼的臨界區(qū),如果另一線程也調(diào)用了EnterCritialSection 函數(shù),并且參數(shù)指向同一臨界區(qū)對(duì)象,那么另一線程將阻塞,直到第一個(gè)線程調(diào)用了LeaveCriticalSection 函數(shù)離開臨界區(qū)為止。臨界區(qū)同步所需要的API 函數(shù):(1) InitializeCriticalSection 函數(shù)。如果要使用臨
46、界區(qū), 首先要使用InitializeCriticalSection 函數(shù)創(chuàng)立臨界區(qū),該函數(shù)定義如下:void InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection );2 DeleteCriticalSection 函數(shù),當(dāng)結(jié)束使用臨界區(qū)對(duì)象時(shí),必須調(diào)用DeleteCriticalSection函數(shù)釋放臨界區(qū)對(duì)象所占有的資源。該函數(shù)定義如下:void DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection );3EnterCriticalSection 函
47、數(shù),在創(chuàng)立了臨界區(qū)對(duì)象后,需要調(diào)用EnterCriticalSection函數(shù)進(jìn)入臨界區(qū),以保護(hù)代碼,該函數(shù)定義如下:void EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);如果臨界區(qū)對(duì)象已經(jīng)屬于另一個(gè)線程,那么此函數(shù)將阻塞直到另一線程離開臨界區(qū)才返回。4LeaveCriticalSection 函數(shù)。如果要離開臨界區(qū),只需要調(diào)用LeaveCriticalSection 函數(shù)即可。該函數(shù)定義如下:void LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
48、3.3 利用信號(hào)量同步信號(hào)量是建立在互斥根底上,并增加了資源計(jì)數(shù)的功能。它允許預(yù)定數(shù)目的線程同時(shí)進(jìn)入要同步的代碼。通過設(shè)置信號(hào)量計(jì)數(shù)為1,只允許一個(gè)線程同時(shí)訪問同步代碼,而實(shí)現(xiàn)線程同步。信號(hào)量同步所需要的API 函數(shù):1 CreateSemaphore 函數(shù)。在使用信號(hào)量實(shí)現(xiàn)同步時(shí),需要調(diào)用CreateSemaphore 函數(shù)創(chuàng)建信號(hào)量對(duì)象。該函數(shù)定義如下:HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, /CE 不支持LONG lInitialCount, /信號(hào)量初始化計(jì)數(shù)值LONG lMaximumCo
49、unt, /信號(hào)量計(jì)數(shù)最大值LPCTSTR lpName /信號(hào)量對(duì)象名稱);如創(chuàng)立信號(hào)量成功,函數(shù)返回信號(hào)量對(duì)象句柄,否那么返回NULL 值。2ReleaseSemaphore 函數(shù)。在使用等待函數(shù)請(qǐng)求信號(hào)量時(shí),等待函數(shù)自動(dòng)給信號(hào)量計(jì)數(shù)減1,那么當(dāng)計(jì)數(shù)減到0 時(shí),信號(hào)量對(duì)象將不能被請(qǐng)求。ReleaseSemaphore 函數(shù)負(fù)責(zé)給信號(hào)量計(jì)數(shù)加值,使信號(hào)量可以被請(qǐng)求。此函數(shù)定義如下:BOOL ReleaseSemaphore(HANDLE hSemaphore, /信號(hào)量句柄LONG lReleaseCount, /信號(hào)量計(jì)數(shù)增加的值LPLONG lpPreviousCount /輸出量,表示
50、上一次信號(hào)量計(jì)數(shù));4、線程同步實(shí)驗(yàn)原理1在PXA270目標(biāo)板上具有8個(gè)LED發(fā)光二極管,利用線程函數(shù)實(shí)現(xiàn)在LED點(diǎn)亮左移后便進(jìn)行點(diǎn)亮右移,并循環(huán)進(jìn)行。其中LeftShiftThread(LPVOID param)線程函數(shù)完成左移,RightShiftThread(LPVOID param)線程函數(shù)完成右移。由于兩線程函數(shù)對(duì)同一物理地址和同一輸入變量outdata進(jìn)行操作,所以需要利用線程同步技術(shù)進(jìn)行線程同步。下面為左移線程代碼:右移代碼參考源程序DWORD CThreadSyncDlg:LeftShiftThread(LPVOID param)CThreadSyncDlg *pDlg=(CT
51、hreadSyncDlg*)param;if(pDlg-m_CtrlEvent.GetCheck()/利用事件同步while(1) WaitForSingleObject(pDlg-m_hSyncEvent,INFINITE);/等待事件標(biāo)示pDlg-outdata =0 x01;for(int i=0;ioutdata);Sleep(m_ShiftTime);pDlg-outdata =(pDlg-outdata )m_bStop) /停止return 0;SetEvent(pDlg-m_hSyncEvent);/標(biāo)示事件if(pDlg-m_CtrlMutex.GetCheck()/互斥同步
52、while(1) WaitForSingleObject(pDlg-m_hSyncMutex,INFINITE);/等待互斥pDlg-outdata =0 x01;for(int i=0;ioutdata);Sleep(m_ShiftTime);pDlg-outdata =(pDlg-outdata )m_bStop) ReleaseMutex(pDlg-m_hSyncMutex);return 0;ReleaseMutex(pDlg-m_hSyncMutex);/釋放互斥對(duì)象if(pDlg-m_CtrlSemaphore.GetCheck()/信號(hào)量同步while(1) WaitForSin
53、gleObject(pDlg-m_hSynSemaphore,INFINITE);pDlg-outdata =0 x01;for(int i=0;ioutdata);Sleep(m_ShiftTime);pDlg-outdata =(pDlg-outdata )m_bStop) ReleaseSemaphore(pDlg-m_hSynSemaphore,1,NULL);return 0;ReleaseSemaphore(pDlg-m_hSynSemaphore,1,NULL);if(pDlg-m_CtrlCritical.GetCheck()/臨界區(qū)同步while(1) EnterCritic
54、alSection(&(pDlg-m_critical_Section);/進(jìn)入臨界區(qū)pDlg-outdata =0 x01;for(int i=0;ioutdata);Sleep(m_ShiftTime);pDlg-outdata =(pDlg-outdata )m_bStop) LeaveCriticalSection(&(pDlg-m_critical_Section);return 0;LeaveCriticalSection(&(pDlg-m_critical_Section);/離開臨界區(qū)if(pDlg-m_CtrlNone.GetCheck()/沒有使用同步技術(shù)while(1)
55、pDlg-outdata =0 x01;for(int i=0;ioutdata);Sleep(m_ShiftTime);pDlg-outdata =(pDlg-outdata )m_bStop)return 0;return 0;2線程開啟過程void CThreadSyncDlg:OnbtnExecute()HANDLE m_hLeftThread;HANDLE m_hRighthread;m_bStop=FALSE;if(m_CtrlEvent.GetCheck():SetEvent(m_hSyncEvent);m_hLeftThread=:CreateThread(NULL,0,Lef
56、tShiftThread,this,0,NULL);/創(chuàng)立左移線程m_hRighthread=:CreateThread(NULL,0,RightShiftThread,this,0,NULL); /創(chuàng)立右移線程if(!m_hLeftThread)MessageBox(_T(Create LeftShiftThread Failed),_T(SystemInformation),MB_OK|MB_ICONERROR);if(!m_hRighthread)MessageBox(_T(Create RightShiftThread Failed),_T(SystemInformation),MB_
57、OK|MB_ICONERROR);CloseHandle(m_hLeftThread);CloseHandle(m_hRighthread);3線程同步量初始化BOOL CThreadSyncDlg:OnInitDialog()CDialog:OnInitDialog();SetIcon(m_hIcon, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set small iconCenterWindow(GetDesktopWindow();/ center to the hpc screenif(!InitLightReg()MessageB
58、ox(LInit Light Register Failed,LSystemInform,MB_OK|MB_ICONERROR);return FALSE;m_CtrlEvent.SetCheck(1);m_hSyncEvent=:CreateEvent(NULL,false,false,NULL);/創(chuàng)立事件同步對(duì)象m_hSyncMutex=:CreateMutex(NULL,false,NULL);/創(chuàng)立互斥同步對(duì)象m_hSynSemaphore = CreateSemaphore(NULL,1,1,NULL);/創(chuàng)立信號(hào)量同步對(duì)象InitializeCriticalSection(&m_
59、critical_Section); /創(chuàng)立臨界區(qū)同步對(duì)象return TRUE;4 同步變量的釋放void CThreadSyncDlg:OnDestroy()if(m_hSyncEvent)CloseHandle(m_hSyncEvent);if(m_hSyncMutex)CloseHandle(m_hSyncMutex);if(m_hSynSemaphore)CloseHandle(m_hSynSemaphore);DeleteCriticalSection(&m_critical_Section);CDialog:OnDestroy();四、實(shí)驗(yàn)組織運(yùn)行要求根據(jù)本實(shí)驗(yàn)的特點(diǎn)、要求和具體
60、條件,采用以學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)。重點(diǎn):Windows CE 下線程編程方法;線程同步編程。難點(diǎn):線程同步實(shí)現(xiàn)線程同步的根本原理。 五、實(shí)驗(yàn)條件裝有WinCE、XScale PXA270開發(fā)環(huán)境和VS的PC機(jī)或虛擬機(jī)六、實(shí)驗(yàn)步驟第一步:連接好實(shí)驗(yàn)系統(tǒng),翻開實(shí)驗(yàn)箱電源。第二步:利用Visual Studio 翻開線程同步調(diào)試工程文件,進(jìn)行編譯:第三步:編譯該代碼,點(diǎn)擊運(yùn)行按鈕,這樣程序就會(huì)下載到XSBase270 目標(biāo)板板上運(yùn)行。運(yùn)行界面如圖2-1 所示。圖2-1 線程同步調(diào)試實(shí)驗(yàn)運(yùn)行界面第四步:線程調(diào)試實(shí)驗(yàn)程序操作過程在分別選中事件同步Event、互斥同步Mutex、信號(hào)量同步S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 7.2+心中有數(shù)上職場+課件-高中政治統(tǒng)編版選擇性必修二法律與生活
- 道德規(guī)范教育班會(huì)主題
- 重癥監(jiān)護(hù)重癥胰腺炎的護(hù)理
- 肛痿中醫(yī)護(hù)理方案講課
- 高績效團(tuán)隊(duì)培訓(xùn)
- 鼻咽癌合并肺部感染護(hù)理
- 采購合同合同管理專業(yè)經(jīng)驗(yàn)交流重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 船舶結(jié)構(gòu)專利分析報(bào)告綠色設(shè)計(jì)重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 合作買車合同范本
- 勞務(wù)派遣小時(shí)工協(xié)議二零二五年
- GB/T 24826-2016普通照明用LED產(chǎn)品和相關(guān)設(shè)備術(shù)語和定義
- GB/T 1447-2005纖維增強(qiáng)塑料拉伸性能試驗(yàn)方法
- 自救互救和創(chuàng)傷急救培訓(xùn)課件
- 小白兔拔蘿卜課件
- 2023年河南推拿職業(yè)學(xué)院單招考試面試模擬試題及答案解析
- 警械的正確使用以及法律適用課件
- 高頻變壓器外觀檢驗(yàn)標(biāo)準(zhǔn)課件
- 火災(zāi)調(diào)查 學(xué)習(xí)指南
- 2021年新湘教版九年級(jí)數(shù)學(xué)中考總復(fù)習(xí)教案
- EGS002:EG8010+IR2110m正弦波逆變器AD16電路圖印制板圖
- 試析水穩(wěn)填充大粒徑碎石基層的全過程施工工藝
評(píng)論
0/150
提交評(píng)論