張小進(jìn)《嵌入式WinCE系統(tǒng)開(kāi)發(fā)》實(shí)驗(yàn)指導(dǎo)書(shū)_第1頁(yè)
張小進(jìn)《嵌入式WinCE系統(tǒng)開(kāi)發(fā)》實(shí)驗(yàn)指導(dǎo)書(shū)_第2頁(yè)
張小進(jìn)《嵌入式WinCE系統(tǒng)開(kāi)發(fā)》實(shí)驗(yàn)指導(dǎo)書(shū)_第3頁(yè)
張小進(jìn)《嵌入式WinCE系統(tǒng)開(kāi)發(fā)》實(shí)驗(yàn)指導(dǎo)書(shū)_第4頁(yè)
張小進(jìn)《嵌入式WinCE系統(tǒng)開(kāi)發(fā)》實(shí)驗(yàn)指導(dǎo)書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩85頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 嵌入式wince系統(tǒng)開(kāi)發(fā) 實(shí) 驗(yàn) 指 導(dǎo) 書(shū)張小進(jìn) 編 寫(xiě)適用專(zhuān)業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)閩江學(xué)院 計(jì)算機(jī)科學(xué) 系2009年 7月前 言嵌入式c語(yǔ)言設(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)鏈接庫(kù)實(shí)驗(yàn),驗(yàn)證性實(shí)驗(yàn)六udp和ping實(shí)驗(yàn),綜合性實(shí)驗(yàn)七can總線實(shí)驗(yàn)構(gòu)成,通過(guò)實(shí)驗(yàn)應(yīng)達(dá)到下列要求:1.熟悉嵌入式wince系統(tǒng)開(kāi)發(fā)平臺(tái)的搭建,pb集成環(huán)境的使用。掌握windows ce 內(nèi)核的配置、編譯方法;掌握構(gòu)建一個(gè)適合特定開(kāi)發(fā)平臺(tái)的windows ce 系統(tǒng)方法;為后續(xù)的其它實(shí)驗(yàn)

2、打下基礎(chǔ)。2.加深對(duì)嵌入式wince系統(tǒng)的認(rèn)識(shí),了解wince 下io 訪問(wèn)機(jī)制和原理;掌握wince 線程編程方法;掌握線程同步原理和實(shí)現(xiàn)線程同步的方法;進(jìn)一步熟悉vs.net 的使開(kāi)發(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);掌握編寫(xiě)流式接口的驅(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 下訪問(wèn)硬件i/o 寄存器的一般方法;了解wince 下io 訪問(wèn)機(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)鏈接庫(kù)的基本原理;掌握wince 動(dòng)態(tài)鏈接庫(kù)程序的編程方法;掌握采用靜態(tài)和動(dòng)態(tài)調(diào)用動(dòng)態(tài)鏈接庫(kù)方法;能根據(jù)實(shí)驗(yàn)內(nèi)容的要求進(jìn)行驗(yàn)證性的編程實(shí)驗(yàn)以掌握動(dòng)態(tài)鏈接庫(kù)的實(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由于這門(mén)課程的實(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)大綱的說(shuō)明先期做好實(shí)驗(yàn)的準(zhǔn)備工作。本指導(dǎo)書(shū)對(duì)綜合性實(shí)驗(yàn)只給出設(shè)計(jì)的要求和指標(biāo)不給實(shí)驗(yàn)源代碼,由學(xué)生自己設(shè)計(jì)、編譯、調(diào)試并運(yùn)行;通過(guò)實(shí)驗(yàn)結(jié)果理解嵌入式wince驅(qū)動(dòng)程序的實(shí)現(xiàn)方法;在實(shí)驗(yàn)報(bào)告中回答思考題。目 錄 實(shí)驗(yàn)一 windows ce 平臺(tái)的構(gòu)建與配置5實(shí)驗(yàn)二 線程同步調(diào)試實(shí)驗(yàn)27實(shí)驗(yàn)三 驅(qū)動(dòng)程序結(jié)構(gòu)實(shí)驗(yàn)38實(shí)驗(yàn)四 i/o接口控制實(shí)驗(yàn)52實(shí)驗(yàn)五 動(dòng)態(tài)鏈接庫(kù)實(shí)驗(yàn)61實(shí)驗(yàn)六 udp 和ping 實(shí)驗(yàn)70實(shí)驗(yàn)七 串口測(cè)試綜合實(shí)驗(yàn)80實(shí)驗(yàn)一 windows ce 平臺(tái)的構(gòu)建與配置實(shí)驗(yàn)學(xué)時(shí)

5、:2實(shí)驗(yàn)類(lèi)型:驗(yàn)證實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康?、掌握windows ce 內(nèi)核的配置、編譯方法;2、掌握構(gòu)建一個(gè)適合特定開(kāi)發(fā)平臺(tái)的windows ce 系統(tǒng)方法;3、熟悉platform builder 開(kāi)發(fā)工具使用方法。二、實(shí)驗(yàn)內(nèi)容1、安裝xsbase270 實(shí)驗(yàn)開(kāi)發(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)簡(jiǎn)介microsoft windows ce 是一個(gè)開(kāi)放的、可裁

6、剪的、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í)的操作系統(tǒng)環(huán)境,專(zhuān)門(mén)面向只有有限資源的嵌入式硬件系統(tǒng)。同時(shí),開(kāi)發(fā)人員可以根據(jù)特定硬件系統(tǒng)對(duì)windows ce 操作系統(tǒng)進(jìn)行裁剪、定制,所以目前windows ce 被廣泛用于各種嵌入式智能設(shè)備的開(kāi)發(fā),是當(dāng)今應(yīng)用最多、增長(zhǎng)最快的嵌入式操作系統(tǒng)。windows ce 被設(shè)計(jì)成為一種高度模塊化的操作系統(tǒng),每一模塊都提供特定的功能,這些模塊中的一部分被劃分成組件,系統(tǒng)設(shè)計(jì)者可以根

7、據(jù)設(shè)備的性質(zhì)只選擇那些必要的模塊或模塊中的組件包含進(jìn)操作系統(tǒng)映像,從而使windows ce 變得非常緊湊(只占不到200 kb的ram),因此只占用了運(yùn)行設(shè)備所需的最小的rom、ram 以及其它硬件資源。windows ce 被分成不同的模塊,其中最主要的模塊有內(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)核模塊是window

8、s ce 操作系統(tǒng)的核心,它為任何基于windows ce 的設(shè)備提供處理器調(diào)度、內(nèi)存管理、異常處理以及系統(tǒng)內(nèi)通信等系統(tǒng)功能,并為應(yīng)用程序使用這些核心功能提供內(nèi)核服務(wù)。windows ce 的內(nèi)核模塊通過(guò)coredll 模塊表示。所有的操作系統(tǒng)定制設(shè)計(jì)都必須包含這個(gè)模塊,但并不是這個(gè)模塊的所有組件都必需的,有一些內(nèi)核組件是可選的。1.2 對(duì)象存儲(chǔ)對(duì)象存儲(chǔ)是windows ce 的默認(rèn)文件系統(tǒng),它相當(dāng)于windows ce 設(shè)備上的硬盤(pán)。對(duì)象存儲(chǔ)是由共享一個(gè)內(nèi)核堆的文件系統(tǒng)、系統(tǒng)數(shù)據(jù)庫(kù)和系統(tǒng)注冊(cè)表組成,即使在沒(méi)有系統(tǒng)主電源時(shí),對(duì)象存儲(chǔ)也能維持應(yīng)用程序及相關(guān)數(shù)據(jù)不會(huì)丟失。對(duì)象存儲(chǔ)可將用戶數(shù)據(jù)和應(yīng)用

9、程序數(shù)據(jù)存入文件或注冊(cè)器。在操作系統(tǒng)創(chuàng)建進(jìn)程(該進(jìn)程中只包括那些必需選項(xiàng))的過(guò)程中,對(duì)于這些不同的對(duì)象存儲(chǔ)組件,可以選取,也可以忽略。1.3 圖形窗口和事件系統(tǒng)模塊圖形窗口和事件系統(tǒng)模塊(gwes)包含大部分的核心windows ce 功能,它集成了圖形設(shè)備接口(gdi)、窗口管理器和事件管理器。gwes 模塊時(shí)windows ce 操作系統(tǒng)高度組件化的部分,它分別由user 和gdi 兩_部分組成,user 用來(lái)處理消息、事件及鼠標(biāo)和鍵盤(pán)等用戶輸入,而gdi 用于處理圖形的屏幕和打印輸出等。gwes 是用戶、應(yīng)用程序和操作系統(tǒng)之間的圖形用戶接口。gwes 通過(guò)處理鍵盤(pán)、鼠標(biāo)動(dòng)作與用戶交互,并

10、選擇傳送到應(yīng)用程序和操作系統(tǒng)的信息。gwes 通過(guò)創(chuàng)建并管理在顯示設(shè)備和打印機(jī)上顯示的窗口、圖形以及文本來(lái)處理輸出。gwes 的中心是窗口。所有應(yīng)用程序都通過(guò)窗口接收來(lái)自操作系統(tǒng)的消息,即使那些為缺少圖形顯示的設(shè)備創(chuàng)建的應(yīng)用程序也是如此。gwes 提供控制器、菜單、對(duì)話框以及圖形顯示的設(shè)備資源,還提供gdi 以控制文本與圖形顯示。1.4 通信模塊通信模塊為基于windows ce 的設(shè)備提供有線或無(wú)線通信能力,使windows ce 設(shè)備能夠與其他設(shè)備或計(jì)算機(jī)進(jìn)行連接與通信,通信組件提供對(duì)下列通信硬件和數(shù)據(jù)協(xié)議的支持: 串行i/o 支持 遠(yuǎn)程訪問(wèn)服務(wù)(ras) 傳輸控制協(xié)議/ internet

11、 協(xié)議(tcp/ip) 局域網(wǎng)(lan) 電話技術(shù)api (tapi) wince 的無(wú)線服務(wù)可選組件除上述主要模塊之外,還可使用其它的操作系統(tǒng)模塊。這些模塊與組件主要有: 設(shè)備管理器和設(shè)備驅(qū)動(dòng)程序 多媒體(聲音)支持模塊 com 支持模塊 wince 外殼模塊wince 提供的每一模塊或組件都支持一組可用的相關(guān)api 函數(shù)。2 platform builder 開(kāi)發(fā)工具介紹platform builder(pb)是微軟提供給windows ce 開(kāi)發(fā)人員進(jìn)行基于windows ce 平臺(tái)下嵌入式操作系統(tǒng)定制的集成開(kāi)發(fā)環(huán)境。它提供了所有進(jìn)行設(shè)計(jì)、創(chuàng)建、編譯、測(cè)試和調(diào)試windows ce 操作

12、系統(tǒng)平臺(tái)的工具。它運(yùn)行在桌面windows 下,開(kāi)發(fā)人員可以通過(guò)交互式的環(huán)境來(lái)設(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+程序。一旦成功地編譯了一個(gè)ce 系統(tǒng),就會(huì)得到一個(gè)名為nk.bin 的映像文件。將該文件下載到目標(biāo)板中,就能夠運(yùn)行ce 了。platform builder 提供了開(kāi)發(fā)人員快速建立基于windows ce 嵌入式系統(tǒng)所需的各種工具。platform builder 的集成開(kāi)發(fā)環(huán)境(ide)允許開(kāi)發(fā)人員配置、建立并調(diào)試能夠借助

13、windows和web 強(qiáng)大功能為嵌入式系統(tǒng)帶來(lái)靈活性與可靠性的新一代高度模塊化設(shè)計(jì)方案。platform builder 提供的主要特性包括:l 平臺(tái)開(kāi)發(fā)向?qū)В╬latform wizard)和bsp 開(kāi)發(fā)向?qū)В洪_(kāi)發(fā)向?qū)в糜谝龑?dǎo)開(kāi)發(fā)人員區(qū)創(chuàng)建一個(gè)簡(jiǎn)單的系統(tǒng)平臺(tái)或bsp(板級(jí)支持軟件包),然后再根據(jù)要求進(jìn)一步修改。開(kāi)發(fā)向?qū)岣吡似脚_(tái)和bsp 創(chuàng)建效率;l 特性目錄(catalog):操作系統(tǒng)可選特性均在特性目錄(catalog)中列出,開(kāi)發(fā)人員可以選擇相應(yīng)的特性來(lái)定制操作系統(tǒng);l 導(dǎo)出向?qū)В╡xport wizard)。可以向其他platform builder 用戶導(dǎo)出自定義的目錄(cata

14、log)特性;l 導(dǎo)出sdk 向?qū)В╡xport sdk wizard):使用戶可以導(dǎo)出一個(gè)自定義的軟件開(kāi)發(fā)工具包(sdk),可以將客戶定制的sdk 導(dǎo)出到特定的開(kāi)發(fā)環(huán)境中(如evc)。l 遠(yuǎn)程工具:可以執(zhí)行同基于windows ce 的目標(biāo)設(shè)備有關(guān)的各種調(diào)試任務(wù)和信息收集任務(wù);l 仿真器(emulator):通過(guò)硬件仿真加速和簡(jiǎn)化了系統(tǒng)的開(kāi)發(fā),使用戶可以在開(kāi)發(fā)工作站上對(duì)平臺(tái)和應(yīng)用程序進(jìn)行調(diào)試,大大簡(jiǎn)化了系統(tǒng)的開(kāi)發(fā)流程,縮短了開(kāi)發(fā)時(shí)間。l 應(yīng)用程序調(diào)試器:可以在自定義的操作系統(tǒng)映像上對(duì)應(yīng)用程序進(jìn)行調(diào)試;l 內(nèi)核調(diào)試器:可以對(duì)自定義的操作系統(tǒng)映像進(jìn)行調(diào)試,并且向用戶提供有關(guān)映像性能的信息;l 驅(qū)

15、動(dòng)測(cè)試工具包(windows ce.net test kit):系統(tǒng)為驅(qū)動(dòng)程序開(kāi)發(fā)提供了基本的測(cè)試工具集;l 基礎(chǔ)配置:為各種流行的設(shè)備類(lèi)別預(yù)置的可操作系統(tǒng)基礎(chǔ)平臺(tái),為自定義操作系統(tǒng)的創(chuàng)建提供了一個(gè)起點(diǎn)。platform builder 的開(kāi)發(fā)界面如圖1-1 所示。圖1-1 platform builder 開(kāi)發(fā)界面3bsp 原理簡(jiǎn)述bsp 又稱(chēng)板級(jí)支持軟件包,它是一個(gè)包括啟動(dòng)程序、oem 適配層程序(oal)、標(biāo)準(zhǔn)開(kāi)發(fā)板(sdb)和相關(guān)硬件設(shè)備驅(qū)動(dòng)程序的軟件包。bsp 是基于windows ce 平臺(tái)系統(tǒng)的主要部分,它是由一些源碼和二進(jìn)制文件組成。對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),它沒(méi)有像pc 機(jī)那樣具有

16、廣泛使用的各種工業(yè)標(biāo)準(zhǔn),各種嵌入式系統(tǒng)的不同應(yīng)用需求決定了它選用的各自定制的硬件環(huán)境,這種多變的硬件環(huán)境決定了無(wú)法完全由操作系統(tǒng)來(lái)實(shí)現(xiàn)上層軟件與底層硬件之間的無(wú)關(guān)性。因此各種商用實(shí)時(shí)操作系統(tǒng)都采用了分層設(shè)計(jì)的方法,它將系統(tǒng)中與硬件直接相關(guān)的一層軟件獨(dú)立出來(lái),稱(chēng)之為boardsupport package(板級(jí)支持軟件包,簡(jiǎn)稱(chēng)bsp)。顧名思義,bsp 是針對(duì)某個(gè)單板而設(shè)計(jì)的,它對(duì)于用戶(開(kāi)發(fā)者)是開(kāi)放的,用戶可以根據(jù)不同的硬件需求對(duì)其作改動(dòng)或二次開(kāi)發(fā),而操作系統(tǒng)本身僅僅提供了cpu 內(nèi)核的無(wú)關(guān)性。bsp 在系統(tǒng)中的角色,很相似于bios 在pc 統(tǒng)中的地位。bsp 在系統(tǒng)中所處的位置,如圖1-

17、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è)與硬件無(wú)關(guān)的軟件平臺(tái)。在platform builder 中,微軟提供了對(duì)十幾中標(biāo)準(zhǔn)開(kāi)發(fā)板(sdb)支持的bsp,這些bsp 覆蓋了所有windows ce 可支持的處理器類(lèi)型,它可使開(kāi)發(fā)者快速地評(píng)估各種操作系統(tǒng)特性并減少新產(chǎn)品開(kāi)發(fā)時(shí)間。四、實(shí)驗(yàn)組織運(yùn)行要求根據(jù)本實(shí)驗(yàn)的特點(diǎn)、要求和具體條件,采用以學(xué)生自主訓(xùn)練為主的開(kāi)放模式組織教學(xué)。重點(diǎn):windows ce 內(nèi)

18、核的配置、編譯方法;構(gòu)建特定開(kāi)發(fā)平臺(tái)的wince系統(tǒng)方法;熟悉platform builder 開(kāi)發(fā)工具使用方法。難點(diǎn):構(gòu)建特定開(kāi)發(fā)平臺(tái)的wince系統(tǒng)方法五、實(shí)驗(yàn)條件裝有wince、xscale pxa270開(kāi)發(fā)環(huán)境和vs的pc機(jī)或虛擬機(jī)六、實(shí)驗(yàn)步驟1、安裝xsbase270 的bsp為了使platform builder支持xsbase270 開(kāi)發(fā)板的硬件資源系統(tǒng),在安裝windows ce 之后需要安裝xsbase270 的板級(jí)支持軟件包(bsp)。具體安裝步驟:雙擊隨開(kāi)發(fā)板提供的bsp 安裝文件xsbase270.msi,進(jìn)入bsp 安裝向?qū)鐖D1-3 所示。圖1-3 xsbase27

19、0 bsp 安裝向?qū)О础皀ext”按鈕,進(jìn)入安裝過(guò)程,bsp 自動(dòng)選擇windows ce 安裝目錄(d:wince500),如圖1-4 所示。圖1-4 bsp 安裝目錄界面按“install”按鈕,進(jìn)行bsp 的安裝。如圖1-5 所示。圖1-5 bsp 安裝過(guò)程界面bsp 安裝完成后,安裝向?qū)崾景惭b完成界面,按“finish”按鈕,完成bsp 的安裝。如圖1-6 所示。圖1-6 bsp 安裝完成界面xsbase270 的bsp 安裝完成后,啟動(dòng)platform builder,在platform builder 的特性目錄區(qū)(catalog)的第三方bsp(third party)節(jié)點(diǎn)下出

20、現(xiàn)所安裝的xsbase270 的bsp(emdoor 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)名稱(chēng)和保存的位置,如圖1-8所示圖1-8 目標(biāo)平臺(tái)名稱(chēng)和保存路徑界面c) 為目標(biāo)平臺(tái)選擇所支持的bsp,xsbase270開(kāi)發(fā)板選擇選擇“emdoor system xsbase270:armv4i” 平臺(tái),如圖1-9所示;圖1-9 bsp 選擇界面d) 為新建的

21、目標(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 platform wizard.”,如圖1-13所示圖1-13 平臺(tái)配置完成界面第二步:平臺(tái)的配置a) 選擇菜單項(xiàng)“platform”“setting”。b)

22、在“platform settings”對(duì)話框中設(shè)置“general”選項(xiàng)卡。選中“release”,如圖1-14所示圖1-14 編譯類(lèi)型設(shè)置c) 在“platform settings” 對(duì)話框中設(shè)置“build options”選項(xiàng)卡;針對(duì)該xsbase270開(kāi)發(fā)板實(shí)驗(yàn)平臺(tái)的選項(xiàng)配置如圖1-15 所示圖1-15 編譯選項(xiàng)配置第三步:配置系統(tǒng)組件和特性如圖1-16 所示,左邊的workspace 區(qū)顯示的是所配置的wince 操作系統(tǒng)所具有的組件,右邊的catalog 區(qū)顯示的則是pb 提供的能夠加入到wince 操作系統(tǒng)的所有組件。實(shí)驗(yàn)者可以在右邊的catalog 區(qū)中選擇自己需要的設(shè)備驅(qū)

23、動(dòng)程序和功能組件。如果決定要添加它到左邊的workspace 區(qū)以參加編譯,通過(guò)右擊選項(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)程序(主要包括:can 總線驅(qū)動(dòng)、ide 接口驅(qū)動(dòng)、led 顯示驅(qū)動(dòng)、電機(jī)接口驅(qū)動(dòng)等)。如果用戶想向新建平臺(tái)添加設(shè)備驅(qū)動(dòng)程序,通過(guò)右擊選項(xiàng)再

24、選擇“add to os design”即可。如圖1-17 所示圖1-17 xsbase270 的bsp 提供的驅(qū)動(dòng)程序b) 添加系統(tǒng)功能組件系統(tǒng)的功能組件屬于平臺(tái)無(wú)關(guān)部分,由platform builder 開(kāi)發(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 user activesync file sync; 圖片瀏覽器的添加:core os windows ce devices ap

25、plications-end user fileviewers microsoft image viewer 大的軟鍵盤(pán)組件的添加: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 ce devices file systems and data store storage manager fat file

26、 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) 添加802.11b無(wú)線cf 卡:core os windows ce devices communication servicesand networking network

27、ing - local area network (lan) wireless lan (802.11)sta -automatic configuration and 802.1x 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 所示),如果沒(méi)出任何錯(cuò)誤,編譯完成后將生成一個(gè)系統(tǒng)映象文件nk.bin,該文件被放在所建工程所保存的目錄下的/reldir/工程名_ armv4i_release 目

28、錄下(本實(shí)驗(yàn)的編譯后的映像文件nk.bin 保存在d:wince500pbworkspacesxsbase270reldirxsbase270_armv4i_release 目錄下)。具體編譯鏈接花費(fèi)的時(shí)間根據(jù)你的宿主機(jī)的速度和你所配置平臺(tái)的大小而定。一般需要2030分鐘。圖1-19 平臺(tái)的編譯4、代碼下載測(cè)試 超級(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)必須為:3)dhcp:disable,第五項(xiàng)必須為:5) download new imag

29、e 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 所示。假如沒(méi)有接收到設(shè)備名:xsbase2960 的話,檢查網(wǎng)線是否連接好,可以查看板子上,以太網(wǎng)端口旁的指示燈是否點(diǎn)亮。然后檢查xsbase2960 的ip 是否跟你的pc 機(jī)在同一網(wǎng)段。圖1-22 目標(biāo)板連接配置圖1-23 下載以太網(wǎng)配置 下載測(cè)試選擇菜單項(xiàng)target attach

30、 device,進(jìn)行設(shè)備連接,如果設(shè)備連接正常,platform builder 將編譯好的映像文件nk.bin 通過(guò)以太網(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 0x206 (length=0x1fa).flasherase: unlocking flash block(s) 0x1, 0x1 (please wait): done.eras

31、ing flash block(s) 0x1, 0x1 (please wait): .done.flashwrite: restored end sector(s) first 0x206 (length=0x1fa).writing to flash (please wait): done.隨后斷電或按復(fù)位鍵重新啟動(dòng),并將超級(jí)終端的第5 項(xiàng)改為“l(fā)aunch existing flashresident image at startup.”然后按“l(fā)”字母。系統(tǒng)將啟動(dòng)起來(lái)。七、思考題1、如何使用pb 編譯一個(gè)mobile handlheld 的平臺(tái)?2、請(qǐng)描述platform builde

32、r 的功能;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í),并寫(xiě)好預(yù)習(xí)報(bào)告,在預(yù)習(xí)報(bào)告中要寫(xiě)出實(shí)驗(yàn)?zāi)康摹⒁?,需要用到的儀器設(shè)備、物品資料以及簡(jiǎn)要的實(shí)驗(yàn)步驟,形成一個(gè)操作提綱。對(duì)實(shí)驗(yàn)中的安全注意事項(xiàng)及可能出現(xiàn)的現(xiàn)象等做到心中有數(shù),但這些不要求寫(xiě)在預(yù)習(xí)報(bào)告中。設(shè)計(jì)性實(shí)驗(yàn)要求進(jìn)入實(shí)驗(yàn)室前寫(xiě)出實(shí)驗(yàn)方案,并經(jīng)指導(dǎo)教師審閱后實(shí)施。2、實(shí)驗(yàn)記錄學(xué)生開(kāi)始實(shí)驗(yàn)時(shí),應(yīng)該將記錄本放在近旁,將實(shí)驗(yàn)中所做的每一步操作、觀察到的現(xiàn)象和所測(cè)得的數(shù)據(jù)及相關(guān)條件如實(shí)地記錄下來(lái)。實(shí)驗(yàn)記錄

33、中應(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é),回答思考題,提出實(shí)驗(yàn)結(jié)論或提出自己的看法。實(shí)驗(yàn)二 線程同步調(diào)試實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí):2實(shí)驗(yàn)類(lèi)型:驗(yàn)證實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康?、了解wince 下io 訪問(wèn)機(jī)制和原理;2、掌握wince 線程編程方法;3、掌握線程同步原理和實(shí)現(xiàn)線程同步的方法4、熟悉vs.net 的開(kāi)發(fā)環(huán)境;二、實(shí)驗(yàn)內(nèi)容1、了解在windows ce 下線程編程方法;2、掌握利用線程同步實(shí)現(xiàn)線程同步的基本原理;3、掌握線程同步編程;4、掌握vs.net 編程方法三、實(shí)驗(yàn)原理、方法和手段1、線程概述w

34、ince 是有優(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 以搶先方式來(lái)調(diào)度線程。線程以“時(shí)間片”為單位來(lái)運(yùn)行,wince 的“時(shí)間片”通常為25 毫秒。過(guò)來(lái)那個(gè)時(shí)間后,如果線程沒(méi)有放棄它的時(shí)間片,并且線程并不緊急,系統(tǒng)就會(huì)掛起線程并調(diào)度另一個(gè)線程來(lái)運(yùn)行。wince 將根據(jù)優(yōu)先級(jí)方法來(lái)決定要運(yùn)行的線程,高優(yōu)先級(jí)的線程將在低優(yōu)先級(jí)的線程前面調(diào)度。2、線程api 函數(shù)2.1 創(chuàng)建線程wince 提供了createthread 函數(shù)來(lái)創(chuàng)

35、建線程,其聲明如下: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 和dwstack

36、size 參數(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 hthread);

37、參數(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 讀寫(xiě)數(shù)據(jù)g,線程b 也正在讀取數(shù)據(jù)g,那么很顯然,該操作將導(dǎo)致數(shù)據(jù)沖突,引起數(shù)據(jù)混亂。這里需要使用同步技術(shù),以保證線程a 和線程b 依次讀

38、寫(xiě)數(shù)據(jù)g,避免數(shù)據(jù)沖突。線程死鎖:例如a 工人為加工iii 零件在等待b 提供的i 零件,而b 正好在等待應(yīng)由a加工提供的ii 零件來(lái)裝配i 零件。由于他們之間再?zèng)]有其他的任何人幫助通信或其他通信手段。所以他們一直在等對(duì)方的零件而進(jìn)入死鎖狀態(tài)。死鎖屬于邏輯錯(cuò)誤,無(wú)法通過(guò)線程同步來(lái)解決。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í)行同

39、步操作,事件對(duì)象處于“未標(biāo)示”狀態(tài),則表示需要等待事件對(duì)象變?yōu)椤耙褬?biāo)示”狀態(tài)才可以進(jìn)行同步操作。下面介紹利用事件同步所需要的api 函數(shù)。(1)createevent 函數(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ì)象名稱(chēng));參數(shù)bmanualreset 表示是否手動(dòng)設(shè)置事件對(duì)象狀態(tài),

40、當(dāng)其值為true 時(shí),在調(diào)用完等待函數(shù)(waitforsingobject,waitformutipleobject)后,則必須調(diào)用resetevent 函數(shù),以設(shè)置事件對(duì)象沒(méi)有被標(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ì)象句柄。若失敗,則返回0,在不用事件句柄時(shí),需要使用closehandle()將其關(guān)閉,以釋放資源。(2)setev

41、ent 函數(shù)和resetevent 函數(shù)。函數(shù)setevent()的功能是將事件對(duì)象設(shè)置為已標(biāo)示狀態(tài)。該函數(shù)的聲明如下:bool setevent(handle hevent);參數(shù)hevent 表示事件對(duì)象句柄。函數(shù)resetevent 函數(shù)功能將事件對(duì)象設(shè)置成未標(biāo)示狀態(tài),該函數(shù)的聲明如下:bool resetevent(handle hevent);(3) 使用事件同步的一般使用流程通常情況,在主線程中,用戶利用createevent 函數(shù)創(chuàng)建一個(gè)事件對(duì)象,并且將參數(shù)bmanualreset 設(shè)為false,參數(shù)binitialstate 也設(shè)為false,此時(shí)事件對(duì)象狀態(tài)未標(biāo)示。然后在線

42、程里通過(guò)waitforsingleobject 函數(shù)來(lái)等待事件被標(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 利用互斥同步互斥同步類(lèi)似于事件對(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)操作。通過(guò)等待函數(shù)請(qǐng)求互斥對(duì)象實(shí)現(xiàn)同步。(1)createmutex 函數(shù)。通過(guò)createmutex

43、 函數(shù)創(chuàng)建互斥對(duì)象,該函數(shù)定義如下:handle createmutex(lpsecurity_attributes lpmutexattributes, /ce 不支持bool binitialowner, /初始化擁有狀態(tài),true 表示擁有,false 表示未被擁有l(wèi)pctstr lpname /互斥名稱(chēng));如果創(chuàng)建互斥函數(shù)對(duì)象createmutex 執(zhí)行成功,將返回互斥對(duì)象句柄。若失敗,則返回error_invalid_handle,在不用互斥句柄時(shí),需要使用closehandle()將其關(guān)閉,以釋放資源。(2)releasemutex 函數(shù)。在使用等待函數(shù)請(qǐng)求互斥對(duì)象時(shí),如果請(qǐng)求到互

44、斥對(duì)象的擁有權(quán),則等待函數(shù)將自動(dòng)設(shè)置互斥對(duì)象狀態(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í)行

45、相關(guān)操作。處理完成后,利用releasemutex 函數(shù)釋放線程對(duì)互斥對(duì)象的擁有權(quán)。當(dāng)所有線程執(zhí)行完畢后,需要使用closehandle()將其關(guān)閉。3.3 利用臨界區(qū)同步“臨界區(qū)”是進(jìn)行線程同步的另一種方法,它能夠阻止兩個(gè)或多個(gè)不同的線程在同一時(shí)間內(nèi)訪問(wèn)同一個(gè)代碼區(qū)域。它通過(guò)調(diào)用entercriticalsection 函數(shù)來(lái)指出已經(jīng)進(jìn)入代碼的臨界區(qū),如果另一線程也調(diào)用了entercritialsection 函數(shù),并且參數(shù)指向同一臨界區(qū)對(duì)象,那么另一線程將阻塞,直到第一個(gè)線程調(diào)用了leavecriticalsection 函數(shù)離開(kāi)臨界區(qū)為止。臨界區(qū)同步所需要的api 函數(shù):(1) init

46、ializecriticalsection 函數(shù)。如果要使用臨界區(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 lpcritical

47、section );(3)entercriticalsection 函數(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ù)將阻塞直到另一線程離開(kāi)臨界區(qū)才返回。(4)leavecriticalsection 函數(shù)。如果要離開(kāi)臨界區(qū),只需要調(diào)用leavecriticalsection 函數(shù)即可。該函數(shù)定義如下:void leavecriticalsection(l

48、pcritical_section lpcriticalsection);3.3 利用信號(hào)量同步信號(hào)量是建立在互斥基礎(chǔ)上,并增加了資源計(jì)數(shù)的功能。它允許預(yù)定數(shù)目的線程同時(shí)進(jìn)入要同步的代碼。通過(guò)設(shè)置信號(hào)量計(jì)數(shù)為1,只允許一個(gè)線程同時(shí)訪問(wèn)同步代碼,而實(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 l

49、initialcount, /信號(hào)量初始化計(jì)數(shù)值long lmaximumcount, /信號(hào)量計(jì)數(shù)最大值lpctstr lpname /信號(hào)量對(duì)象名稱(chēng));如創(chuàng)建信號(hào)量成功,函數(shù)返回信號(hào)量對(duì)象句柄,否則返回null 值。(2)releasesemaphore 函數(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,

50、/信號(hào)量計(jì)數(shù)增加的值lplong lppreviouscount /輸出量,表示上一次信號(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)行。其中l(wèi)eftshiftthread(lpvoid param)線程函數(shù)完成左移,rightshiftthread(lpvoid param)線程函數(shù)完成右移。由于兩線程函數(shù)對(duì)同一物理地址和同一輸入變量outdata進(jìn)行操作,所以需要利用線程同步技術(shù)進(jìn)行線程同步。下面為左移線程代碼:(右移代碼參考源程序)dword cthreadsyncdlg:leftshift

51、thread(lpvoid param)cthreadsyncdlg *pdlg=(cthreadsyncdlg*)param;if(pdlg-m_ctrlevent.getcheck()/利用事件同步while(1) waitforsingleobject(pdlg-m_hsyncevent,infinite);/等待事件標(biāo)示pdlg-outdata =0x01;for(int i=0;ioutdata);sleep(m_shifttime);pdlg-outdata =(pdlg-outdata )m_bstop) /停止return 0;setevent(pdlg-m_hsynceven

52、t);/標(biāo)示事件if(pdlg-m_ctrlmutex.getcheck()/互斥同步while(1) waitforsingleobject(pdlg-m_hsyncmutex,infinite);/等待互斥pdlg-outdata =0x01;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_ctrlsem

53、aphore.getcheck()/信號(hào)量同步while(1) waitforsingleobject(pdlg-m_hsynsemaphore,infinite);pdlg-outdata =0x01;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_ctrlcrit

54、ical.getcheck()/臨界區(qū)同步while(1) entercriticalsection(&(pdlg-m_critical_section);/進(jìn)入臨界區(qū)pdlg-outdata =0x01;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);/離開(kāi)臨界區(qū)if(pdlg-m_ctrlnone.getcheck()/沒(méi)有使用同步技術(shù)while(1) pdlg-outdata

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論