開發(fā)手冊(cè) - 圖文-_第1頁
開發(fā)手冊(cè) - 圖文-_第2頁
開發(fā)手冊(cè) - 圖文-_第3頁
開發(fā)手冊(cè) - 圖文-_第4頁
開發(fā)手冊(cè) - 圖文-_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 WINDOWS CE開發(fā)手冊(cè)基于ARM9AT920芯片S3C2410文檔編號(hào):項(xiàng)目參考編號(hào):支持單位:香港理工大學(xué)ISM研究院清華大學(xué)電工電子技術(shù)中心版權(quán)所有嚴(yán)禁翻印 2007年3月第1章Windows CE簡介 (41.1智能設(shè)備與微軟嵌入式系統(tǒng) (41.2 Windows CE (4第2章 Windows CE開發(fā)平臺(tái)的構(gòu)建與配置 (72.1 目標(biāo)設(shè)備平臺(tái)介紹 (72.2 操作系統(tǒng)開發(fā)平臺(tái) (82.3應(yīng)用程序開發(fā)平臺(tái) (12第3章Windows CE操作系統(tǒng)創(chuàng)建 (163.1創(chuàng)建操作系統(tǒng)平臺(tái)設(shè)計(jì) (163.2 目標(biāo)平臺(tái)的下載 (22第4章 WINDOWS CE驅(qū)動(dòng)程序開發(fā) (314.1

2、驅(qū)動(dòng)設(shè)備的分類 (314.2 流接口設(shè)備驅(qū)動(dòng) (32第5章 WINDOWS CE應(yīng)用程序開發(fā) (415.1 本地應(yīng)用程序與可托管應(yīng)用程序 (415.2本地應(yīng)用程序開發(fā) (425.3 智能設(shè)備托管應(yīng)用程序的開發(fā) (46附錄:光盤內(nèi)容清單 (49本頁特意留作空白頁IDETCO大學(xué)計(jì)劃方案第1章Windows CE簡介1.1 智能設(shè)備與微軟嵌入式系統(tǒng)隨著計(jì)算機(jī)技術(shù)以及信息技術(shù)不斷成熟與發(fā)展,人們的消費(fèi)需求和消費(fèi)心理都發(fā)生了巨大變化,人們已經(jīng)不再一味追求PC的大容量和高速度而是轉(zhuǎn)而設(shè)法將計(jì)算機(jī)應(yīng)用與日常生活的方方面面,追求個(gè)性化的產(chǎn)品和消費(fèi).近幾年以來一軟硬件組成為顯著特征,以消費(fèi)電子類產(chǎn)品為主導(dǎo)的智

3、能設(shè)備以超乎人們想象的速度獲得了前所未有的發(fā)展,在這個(gè)過程中,微軟公司也是首當(dāng)其沖.一臺(tái)智能設(shè)備從本質(zhì)上講仍然是一臺(tái)計(jì)算機(jī),因?yàn)樗哂幸话阌?jì)算機(jī)的典型特征,它仍然由軟件和硬件組成,在智能設(shè)備中既有CPU,存儲(chǔ)器,系統(tǒng)時(shí)鐘和外部接口等,也有OS和應(yīng)用軟件.和一般的通用計(jì)算機(jī)相比,它更像一臺(tái)專用的計(jì)算機(jī),是看不見的計(jì)算機(jī).智能設(shè)備也叫嵌入式智能設(shè)備,這是相對(duì)于一般的PC而言的,每臺(tái)智能設(shè)備都是一個(gè)典型的嵌入式軟硬件系統(tǒng),智能設(shè)備的開發(fā)也就是對(duì)嵌入式軟硬件進(jìn)行裁剪,定制和開發(fā)的過程.就嵌入式硬件來說,其處理器有8位,16位和32位等不同類型,其架構(gòu)也有X86,ARM,MIPS,SHx等不同類型.就嵌

4、入式系統(tǒng)來講,目前市場上主流的有windows CE,Vxworks,Linux,ONX,pSOS等.目前32位微處理器硬件和實(shí)時(shí)多任務(wù)OS軟件相結(jié)合是嵌入式系統(tǒng)發(fā)展的主流.4.2版本.1.2 Windows CEMicrosoft Windows CE是一個(gè)開放的,可裁剪的,32位的實(shí)時(shí)嵌入式操作系統(tǒng).和其他桌面版窗口操作系統(tǒng)相比,他具有可靠性好,實(shí)時(shí)行高,內(nèi)核體積 小的特點(diǎn),所以被廣泛用于各種嵌入式智能設(shè)備的開發(fā),是當(dāng)今應(yīng)用最多,增長最快的嵌入式操作系統(tǒng).Windows CE的設(shè)計(jì)目標(biāo)如下:1. 模塊化和小內(nèi)存占用Windows CE是為小型設(shè)備如掌上電腦和嵌入式系統(tǒng)設(shè)計(jì)的,由于此類設(shè)備通

5、常只有有限的資源,所以Windows CE必須能適應(yīng)這種限制.典型的wicne設(shè)備只有8-32M的ROM,而Windows CE的最小內(nèi)核只有500KB.Windows CE被設(shè)計(jì)成高度模塊化的一種操作系統(tǒng),以適應(yīng)不同類型的智能設(shè)備對(duì)于操作系統(tǒng)映象大小不同的要求.Windows CE被分成一些不同的模塊,其中內(nèi)核,圖形窗口子事件,文件系統(tǒng)和通信模塊是4個(gè)主要模塊.2.多種有線與無線連接支持Windows CE在很大程度上是為移動(dòng)手持設(shè)備而設(shè)計(jì)的,所以Windows CE提供了豐富而靈活的無線通信支持和有線網(wǎng)絡(luò)支持.無線支持包括紅外,藍(lán)牙和802.1x,有線支持包括串并口通信,以太網(wǎng)通信,撥號(hào)網(wǎng)

6、絡(luò)等,另外還支持GPS,GPRS,ISDN,ADSL,CDMA等多種通信方式,同時(shí)Windows CE還允許遠(yuǎn)程授權(quán),認(rèn)證,管理和更新Windows CE設(shè)備上應(yīng)用程序或服務(wù).3.強(qiáng)大的實(shí)時(shí)性能力Windows CE被設(shè)計(jì)成一個(gè)RTOS,它強(qiáng)大的中斷和線程調(diào)度機(jī)制和內(nèi)核操作系統(tǒng)服務(wù)保證它為一個(gè)硬實(shí)時(shí)操作系統(tǒng),能滿足不同設(shè)備對(duì)于時(shí)間關(guān)鍵性任務(wù)的時(shí)間和性能的要求.4.豐富的多媒體和多語言支持Windows CE允許創(chuàng)建基于.NET的智能設(shè)備個(gè)性化程序,并提供最新的多媒體的支持.從Windows CE 4.0開始,完全支持創(chuàng)建中文的操作系統(tǒng),并提供微軟拼音,雙拼等中文輸入法.5.強(qiáng)大的開發(fā)工具支持

7、第2章 Windows CE開發(fā)平臺(tái)的構(gòu)建與配置2.1 目標(biāo)設(shè)備平臺(tái)介紹通過下圖我們可以大概了解到這塊芯片提供那些資源.例如I2C,I2S,UART等. 這些資源包括:一個(gè)LCD控制器,SDRAM控制器,3個(gè)通道的UART,4個(gè)通道的DMA,4個(gè)具有PWM功能的計(jì)時(shí)器和1個(gè)內(nèi)部時(shí)鐘,8通道的10位ADC,觸摸屏接口,I2S總線接口,2個(gè)USB主機(jī)接口,1個(gè)USB設(shè)備接口,2個(gè)SPI接口,SD接口和MMC卡接口,看門狗計(jì)數(shù)器,117位通用IO口和24位外部中斷源. 203M的時(shí)鐘頻率使其運(yùn)行Windows CE十分流暢.2.2 操作系統(tǒng)開發(fā)平臺(tái)Platform Builder是用于創(chuàng)建基于Win

8、dows CE的嵌入式操作系統(tǒng)設(shè)計(jì)的一個(gè)集成開發(fā)環(huán)境(IDE,它集成了進(jìn)行設(shè)計(jì),產(chǎn)生,構(gòu)建,測試和調(diào)試Windows CE操作系統(tǒng)設(shè)計(jì)所需要的所有開發(fā)工具. Platform Builder IDE主要包括以下內(nèi)容.1 Catalog窗口該窗口是Platform Builder的一個(gè)重要工作窗口, Platform Builder將Windows CE提供的大量組件和第三方提供的組件按章組件特性組成一個(gè)樹狀的結(jié)構(gòu)放置到這個(gè)窗口.該窗口的每一個(gè)組件都可以添加到自己定制的操作系統(tǒng)設(shè)計(jì)中.2 Platform Builder的用戶接口Platform Builder的用戶接口主要有上下文敏感的菜單條

9、,快捷菜單,可編輯的屬性頁,上下文敏感的工具條,上下文敏感的快捷鍵,工具條按鈕和命令的工具提示功能,上下文敏感的幫助文檔以及可定制的工具條和菜單組成.3 Platform Builder的向?qū)驅(qū)е饕獛椭_發(fā)者進(jìn)行系列化,標(biāo)準(zhǔn)化的操作. Platform Builder主要包括5種向?qū)?(1 BSP向?qū)в糜趧?chuàng)建一個(gè)新的BSP,克隆一個(gè)已有的BSP或者修改一個(gè)已有的BSP,以使BSP能被第三方用戶或者硬件接受.(2新平臺(tái)向?qū)в糜趧?chuàng)建一個(gè)包含操作系統(tǒng)設(shè)計(jì)及相關(guān)工程和文件的工作空間,以便創(chuàng)建一個(gè)新的操作系統(tǒng)運(yùn)行是映象.(3新工程向?qū)в糜趲椭_發(fā)者創(chuàng)建一個(gè)C+工程,包括可執(zhí)行程序,動(dòng)態(tài)鏈接庫,靜態(tài)庫和

10、傳輸層等.(4導(dǎo)出向?qū)?用于將第三方的分類項(xiàng)目導(dǎo)出為一個(gè).msi 安裝文件,以便其他平臺(tái)開發(fā)者能夠?qū)⑺惭b到另一臺(tái)開發(fā)工作站上的Platform Builder中,并在Catalog中使用.(5SDK向?qū)в糜趲椭脚_(tái)開發(fā)者創(chuàng)建,配置和定制一個(gè)基于操作系統(tǒng)設(shè)計(jì)的SDK(軟件開發(fā)工具包,在這個(gè)SDK被分發(fā)給應(yīng)用程序開發(fā)者后,程序員就可以脫離Platform Builder這個(gè)環(huán)境為定制的系統(tǒng)開發(fā)應(yīng)用程序了.4 工作空間(workspace當(dāng)創(chuàng)建一個(gè)操作系統(tǒng)設(shè)計(jì)時(shí),也就創(chuàng)建了一個(gè)工作空間.一個(gè)工作空間可以包含多個(gè)工程,但只能包含一個(gè)操作系統(tǒng)設(shè)計(jì).5 工程當(dāng)使用New Project Wizard創(chuàng)建

11、也個(gè)新的workspace類型的C+工程時(shí),將會(huì)產(chǎn)生一個(gè)名為.pbpxml的工程定義文件, Platform Builder編譯此工程的所有信息都包含在這個(gè)文件里面.6文本編輯器文本編輯器用來管理,編輯和打印所有基于文本的文件. (2單擊Install,顯示如下圖的Welcome界面 (3單擊next顯示授權(quán)協(xié)議界面,選擇接受授權(quán)協(xié)議,單擊”next”,顯示客戶信息界面,同時(shí)輸入產(chǎn)品密鑰,如下: (4單擊Next選擇安裝類型,如下圖 (5單擊next,選擇目標(biāo)文件夾如下圖: (6單擊next選擇要安裝的CPU類型,如下圖 (6單擊next,接受協(xié)議,準(zhǔn)備安裝.如下圖 (7單擊Next,開始安裝

12、2.3應(yīng)用程序開發(fā)平臺(tái)c+,c#,ASP.net語言開發(fā)Windows CE應(yīng)用程序. (1在eVC目錄下雙擊setup,如下圖: (2單擊next,系統(tǒng)顯示用戶授權(quán)許可,選擇接受許可,如下圖: (3單擊next,添加產(chǎn)品序列號(hào)和用戶標(biāo)識(shí)(ID,如下圖: (4單擊next,顯示產(chǎn)品安裝選擇界面,選擇所有產(chǎn)品安裝選項(xiàng) (5單擊next,開始進(jìn)入安裝程序. (1雙擊文件夾下的setup圖標(biāo),進(jìn)入Visual Studio .NET 2003的安裝程序,如下圖: (2單擊Visual Studio .NET 系統(tǒng)必備 ,系統(tǒng)顯示如下: (2單擊立即更新,安裝系統(tǒng)必備文件,然后針對(duì)提示進(jìn)行選擇,這個(gè)安

13、裝過程很簡單,就不多介紹了. 第3章Windows CE操作系統(tǒng)創(chuàng)建3.1創(chuàng)建操作系統(tǒng)平臺(tái)設(shè)計(jì)首先安裝適合我們硬件平臺(tái)的BSP,按照以下步驟.(1在Windows CE420PLATFORM目錄下創(chuàng)建一個(gè)名為”SMDK2410”的文件夾,如果已經(jīng)有了該文件夾,將其改為備份。如下圖: (2將光盤中的SMDK2410中的內(nèi)容拷貝到SMDK文件夾下,去掉該文件夾的只讀屬性.(3將SMDK2410_for_PublicoakdriversNETCARDcs8900r目錄拷貝到WINDOWS CE420PUBLICCOMMONOAKDRIVERSNETCARD目錄下. (4拷貝WINDOWS CE420

14、PLATFORMSMDK2410_for_PublicCESYSGEN 目錄下的makefile到WINDOWS CE420PUBLICCOMMCONCESYSGEN目錄下.(5打開 Platform Builder 4.2,選擇file菜單下的Manage Catalog Features如下圖 (6在彈出的對(duì)話框中選擇”smdk2410.cec”,點(diǎn)remove(7點(diǎn)import,導(dǎo)入platformsmdk240smdk420.cec文件,在cotalog的BSP下將看到安裝好的BSP,如下圖: 這樣,我們的BSP就添加成功了.然后我們定制一個(gè)自己的Windows CE操作系統(tǒng).步驟如下

15、:(1在file菜單下選擇”New Platform”,彈出New Platform Wizard-step1,選擇next. (2在New Platform Wizard-step2中選擇SAMSUNG SMDK2410:ARM4 BSP 按next (3選擇”Available configurations”中的Mobile Handheld 并輸入Platform name ,點(diǎn)next繼續(xù). (4在New Platform Wizard-step4中選擇必要的配置,點(diǎn)next. (5 New Platform Wizard-step5中選擇所需的網(wǎng)絡(luò)配置.點(diǎn)next,繼續(xù) (6最后點(diǎn)f

16、inish,結(jié)束新平臺(tái)建立.(7在菜單Platform中點(diǎn)setting,在設(shè)置對(duì)話框Build Option中如圖進(jìn)行配置 (8加入U(xiǎn)SB鼠標(biāo)特性支持,如圖,點(diǎn)開Catalog->Core OS->Display based devices->Core OS Service->USB Host Support ->USB Human Input Device(HIDClass Driver點(diǎn)右鍵選擇”add to platform”在選擇其子項(xiàng)”USB HID keyboard and Mouse”同樣右鍵”add to platform”. (9加入U(xiǎn)SB移動(dòng)

17、存儲(chǔ)設(shè)備支持,如下圖: (10加入網(wǎng)絡(luò)驅(qū)動(dòng),點(diǎn)擊打開Catalog->BSPs->Samsung SMDK2410:ARMV4->Device Driver->Networking->Local Area Networking(LAN devices->CS8900,點(diǎn)右鍵加入”add to platform”. (11更改適合自己的網(wǎng)絡(luò)環(huán)境,如下圖,通過修改編輯platform.reg (12點(diǎn)擊Build菜單中Build platform開始編譯.至此我們完成了基于S3C2410的操作系統(tǒng)平臺(tái)的搭建.接下來我們將把這個(gè)平臺(tái)產(chǎn)生的鏡像下載到我們的硬件開發(fā)板

18、中.3.2 目標(biāo)平臺(tái)的下載1.將Nboot和Eboot燒錄到Nandflash/SMC中,(1安裝光盤資料中的開發(fā)工具下面的”YFSJF” (2使用JTAG把PC機(jī)與目標(biāo)板連接.(3運(yùn)行YFSJF程序,選擇WINDOWS CE資源下image目錄下的Nboot_Debug.bin文件,按下圖的配置進(jìn)行燒寫. (4選擇文件為上面我們生成平臺(tái)目錄下的EBOOT . NB0文件,目錄為X:WINDOWSCE420PUBLICSBC2410RelDirSAMSUNG_SMDK2140_ARMV4IRelease目錄下的Eboot.nb0,設(shè)置目標(biāo)塊為2,如下圖所示: (5燒錄完畢后,關(guān)閉開發(fā)板電源,拔

19、出JTAG.(6用串口線連接PC機(jī)和目標(biāo)平臺(tái),在PC機(jī)端運(yùn)行DNW軟件,點(diǎn)擊”Serial Port”菜單下的”Connect”,打開開發(fā)板電源,在DNW窗口可以看到如下圖信息: 至此Nboot和Eboot燒錄完畢2.將Image文件通過Ethernet下載到開發(fā)板上運(yùn)行(1接上面的操作,在DNW窗口顯示中的參數(shù)設(shè)置如下: 第2項(xiàng):Download image to nandflash or adram,我們選擇nandflash第3項(xiàng):對(duì)nandflash進(jìn)行低級(jí)格式化(2在PC機(jī)上打開Platform Builder 4.2,打開我們建立的工程,如下圖 (3在DNW窗口下按4,開始下載,如

20、下圖: (4在Platform Builder4.2窗口下,選擇”Target菜單下的”Configure Remote Connection”,如下圖 (5在download下點(diǎn)Configure按鈕,如下圖,連接好后將出現(xiàn)如下圖的效果: 將Kernel也如此設(shè)置.(6選擇”Target”菜單下的”Download/Initialize”,如下圖 這是在PC機(jī)端將彈出下載進(jìn)度,如下圖 同時(shí)在DNW將會(huì)回傳下載信息當(dāng)出現(xiàn)如下信息時(shí),接上JTAG,在PC機(jī)上運(yùn)行YFSJF程序,選擇Nboot_Release.bin文件,目標(biāo)塊為0,燒錄到Nandflash中.以后只要打開開發(fā)板電源,Window

21、s CE就會(huì)自動(dòng)運(yùn)行了. 運(yùn)行效果如下圖,這是通過同步軟件截取的目標(biāo)板上的情況 3下面我們就講一下微軟提供的同步軟件的安裝.在光盤開發(fā)工具中找到ActiveSync文件夾,雙擊setup安裝.安裝后要安裝USB驅(qū)動(dòng),驅(qū)動(dòng)位置在SMDK2410DRIVERSUSBFUNCTION目錄下.然后我們啟動(dòng)ActiveSync,進(jìn)行連接設(shè)置,如果連接上將有如下顯示. IDETCO大學(xué)計(jì)劃方案 通過USB我們可以像訪問U盤一樣訪問目標(biāo)設(shè)備,如下圖 注意: 由于pb中存在一個(gè)小bug,導(dǎo)致Windows CE的中文界面中會(huì)有兩個(gè)“啟動(dòng)”,一個(gè)是中文的啟動(dòng),一個(gè)是“startup”。usbconnt在中文的啟

22、動(dòng)中,而系統(tǒng)默認(rèn)從startup啟動(dòng)。所以需要在WINDOWSCE420PUBLICCOMMONOAKFILESINTLTRNS0804的common.str中修改“WindowsStartUp”為“Windows啟動(dòng)”。然后再編譯工程。如果不改動(dòng)這個(gè),直接編譯,編譯出來的NK.bin文件下載以后,無法使用ActiveSysc自動(dòng)和PC同步!至此我們已經(jīng)基本把定制Windows CE系統(tǒng)介紹完了. IDETCO大學(xué)計(jì)劃方案 第4章 WINDOWS CE驅(qū)動(dòng)程序開發(fā)驅(qū)動(dòng)程序開發(fā)是BSP開發(fā)的主要內(nèi)容.Windows CE為智能設(shè)備準(zhǔn)備了大量的驅(qū)動(dòng)程序,為了更快的掌握Windows CE驅(qū)動(dòng)的開發(fā)

23、,這需要讀者自己親自分析大量的微軟提供的不同類型設(shè)備驅(qū)動(dòng)程序的源代碼.4.1 驅(qū)動(dòng)設(shè)備的分類1內(nèi)建驅(qū)動(dòng)程序內(nèi)建驅(qū)動(dòng)程序有時(shí)也被稱為本地設(shè)備驅(qū)動(dòng)程序.他們被靜態(tài)的鏈接到GWES,也就是說這些驅(qū)動(dòng)不是作為一個(gè)單獨(dú)的DLL存在的.指示LED驅(qū)動(dòng)程序就是一個(gè)內(nèi)建驅(qū)動(dòng)程序的一個(gè)例子,指示LED驅(qū)動(dòng)程序作為nleddrv.lib被鏈接到GWES.2 可安裝的驅(qū)動(dòng)程序在微軟提供的Windows CE例驅(qū)動(dòng)程序中,按驅(qū)動(dòng)程序的結(jié)構(gòu),有兩種類型的驅(qū)動(dòng)程序,分層的驅(qū)動(dòng)程序和不分層的驅(qū)動(dòng)程序.常MDD層由微軟提供.開發(fā)者一般只需要編寫特定于硬件平臺(tái)的PDD層代碼,而直接使用MDD層公用代碼.2 不分層的驅(qū)動(dòng)程序,驅(qū)

24、動(dòng)的分層與不分層都是相對(duì)的,任何分層的驅(qū)動(dòng)都可以使用不分層驅(qū)動(dòng)來代替.如果時(shí)間或者性能是一個(gè)關(guān)鍵因素,那么不分層驅(qū)動(dòng)是最好的選擇.但是,不論分層的還是不分層的,都可以基于微軟提供的例驅(qū)動(dòng)代碼進(jìn)行開發(fā),這將大大加速開發(fā)的進(jìn)程并簡化開發(fā)的難度.開發(fā)者要盡量避免從第一行程序?qū)懫? 按照驅(qū)動(dòng)程序?qū)С鼋涌诓煌?驅(qū)動(dòng)程序可以分為本地驅(qū)動(dòng)程序與流接口驅(qū)動(dòng)程序.一些類型的設(shè)備,如鍵盤和顯示,對(duì)操作系統(tǒng)有一個(gè)定制的接口,由于他們使用的接口是Windows CE特定的,所以這些驅(qū)動(dòng)被成為本地設(shè)備驅(qū)動(dòng).還有一種驅(qū)動(dòng)是流接口設(shè)備驅(qū)動(dòng),不管驅(qū)動(dòng)程序控制的設(shè)備是什么類型,凡是導(dǎo)出流接口函數(shù)的驅(qū)動(dòng)都是流接口驅(qū)動(dòng).所以流接口

25、驅(qū)動(dòng)都被使用相同的接口并導(dǎo)出一組相同的函數(shù)-流接口函數(shù).流接口函數(shù)被設(shè)計(jì)來與通常的文件系統(tǒng)API緊密匹配,即由流接口驅(qū)動(dòng)管理的設(shè)備向應(yīng)用程序表現(xiàn)為一個(gè)文件系統(tǒng),應(yīng)用程序通過對(duì)文件系統(tǒng)的特殊文件進(jìn)行操作從而完成對(duì)設(shè)備的操作.4.2 流接口設(shè)備驅(qū)動(dòng)流接口設(shè)備驅(qū)動(dòng)是不管驅(qū)動(dòng)程序控制的類型都導(dǎo)出流接口函數(shù)的驅(qū)動(dòng).流接口適合與任何邏輯上被認(rèn)為做為數(shù)據(jù)源或數(shù)據(jù)存儲(chǔ)的I/O設(shè)備,即任何一產(chǎn)生或消耗數(shù)據(jù)為主要功能的外圍設(shè)備驅(qū)動(dòng)都可以選擇導(dǎo)出流接口,如串口設(shè)備驅(qū)動(dòng)就是一個(gè)典型的流接口設(shè)備驅(qū)動(dòng).流接口函數(shù)本身是為更緊密地匹配通常的文件系統(tǒng)應(yīng)用程序編程接口(如ReadFile,WriteFile,IOControl

26、等而設(shè)計(jì)的,由流接口管理設(shè)備通過文件系統(tǒng)導(dǎo)出給應(yīng)用程序,應(yīng)用程序通過打開文件系統(tǒng)的特殊文件與設(shè)備驅(qū)動(dòng)進(jìn)行交互.下面我們對(duì)流接口函數(shù)進(jìn)行介紹.標(biāo)準(zhǔn)的流接口是如下的一組函數(shù),我們先來看一下這組函數(shù)的基本外觀:1、HANDLE XXX_Init(LPCTSTR pContext,LPCVOID lpvBusContext;這個(gè)函數(shù)是在設(shè)備管理程序通過ActiveDeviceEx(函數(shù)激活設(shè)備時(shí)被系統(tǒng)調(diào)用的。它的主要功能是初始化驅(qū)動(dòng)程序中用到的資源,對(duì)I/O地址空間和內(nèi)存進(jìn)行映射等。2、BOOL XXX_Deinit(DWORD hDeviceContext;這個(gè)函數(shù)是在設(shè)備管理程序通過Deactiv

27、ateDevice(函數(shù)卸載設(shè)備時(shí)被系統(tǒng)調(diào)用的,它的主要功能是回收驅(qū)動(dòng)程序中用到的資源。3、DWORD XXX_Open(DWORD hDeviceContext,DWORDAccessCode,DWORD ShareMode; 這個(gè)函數(shù)是在應(yīng)用程序通過CreateFile(函數(shù)打開設(shè)備時(shí)調(diào)用的。4、BOOL XXX_Close(DWORD hOpenContext;這個(gè)函數(shù)是在應(yīng)用程序通過CloseHandle(函數(shù)關(guān)閉句柄時(shí)調(diào)用的。5、DWORD XXX_Read(DWORD hOpenContext,LPVOID pBuffer,DWORDCount;這個(gè)函數(shù)是在應(yīng)用程序通過ReadFi

28、le(函數(shù)讀取設(shè)備時(shí)調(diào)用的。6、DWORD XXX_Write(DWORD hOpenContext,LPCVOIDpBuffer,DWORD Count;這個(gè)函數(shù)是在應(yīng)用程序通過WriteFile(函數(shù)向設(shè)備寫入數(shù)據(jù)時(shí)調(diào)用的。7、DWORD XXX_IOControl(DWORD hOpenContext,DWORDdwCode,PBYTE pBufIn,DWORD dwLenIn,PBYTE pBufOut,DWORDdwLenOut,PDWORD pdwActualOut;這個(gè)函數(shù)是在應(yīng)用程序通過DeviceIOControl(函數(shù)向設(shè)備發(fā)送控制字時(shí)調(diào)用的。8、void XXX_Powe

29、rUp(DWORD hDeviceContext;這個(gè)函數(shù)是在向設(shè)備恢復(fù)供電的時(shí)候調(diào)用的。9、void XXX_PowerDown(DWORD hDeviceContext;這個(gè)函數(shù)是在設(shè)備斷電的時(shí)候調(diào)用的。上述函數(shù)中的XXX部分是在注冊(cè)表中注冊(cè)此設(shè)備驅(qū)動(dòng)程序的時(shí)候Perfix注冊(cè)表項(xiàng)的值。例如串口,則用Com,并口則用LTP等等。只要一個(gè)DLL中針對(duì)特定設(shè)備實(shí)現(xiàn)了上述接口并且正確在注冊(cè)表中注冊(cè),那么就可以在程序中通過那些文件API函數(shù)來訪問此設(shè)備。下面我們就一起在PB4.2中按上述接口模擬一個(gè)設(shè)備。設(shè)備的名字就叫做TTT吧。運(yùn)行PB4.2,打開上次做的平臺(tái),在文件菜單中執(zhí)行"New

30、 Project or File"命令,新建一個(gè)"WCE Dynamic-Link Library"項(xiàng)目,輸入項(xiàng)目名字為"Test"。在向?qū)У牡谝徊街休斎氡匾男畔?此處不輸也可以,這些信息可供向?qū)ё詣?dòng)生成一個(gè)README.TXT文件,不過還是寫上好,以免以后忘了,在下一步中選擇一個(gè)空項(xiàng)目,完成。在新的源程序文件中輸入以下程序: / test.cpp : Defines the entry point for the DLL application./#include "stdafx.h"#include "mem

31、ory.h"#include "windows.h"HANDLE* hDevice;#define BUFSIZE 256WCHAR bufferBUFSIZE;BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReservedreturn TRUE;HANDLE TTT_Init(LPCTSTR pContext,LPCVOID lpvBusContext hDevice=(HANDLE*LocalAlloc(LPTR,sizeof(HANDLE; memset(buf

32、fer,0,sizeof(WCHAR*BUFSIZE;return hDevice;BOOL TTT_Deinit(DWORD hDeviceContextLocalFree(hDevice;return TRUE; DWORD TTT_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareModeif (!hDeviceContextreturn FALSE;return TRUE;BOOL TTT_Close(DWORD hOpenContextif (!hOpenContextreturn FALSE;return TRUE;DWOR

33、D TTT_Read(DWORD hOpenContext,LPVOID pBuffer,DWORD Count DWORD dwret=min(BUFSIZE,Count;wcsncpy(LPWSTRpBuffer,buffer,dwret;return dwret;DWORD TTT_Write(DWORD hOpenContext,LPCVOID pBuffer,DWORD Count DWORD dwret=min(BUFSIZE,Count;wcsncpy(buffer,(LPWSTRpBuffer,dwret;return dwret;DWORD TTT_IOControl(DWO

34、RD hOpenContext,DWORD dwCode,PBYTE pBufIn, DWORD dwLenIn,PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut return TRUE;void TTT_PowerUp(DWORD hDeviceContextreturn;void TTT_PowerDown(DWORD hDeviceContextreturn;編譯,然后編譯該test文件夾下的test.def文件,將這些實(shí)現(xiàn)的接口函數(shù)導(dǎo)出: LIBRARY TEST.DLLEXPORTSTTT_InitTTT_DeinitTTT_OpenT

35、TT_CloseTTT_PowerUpTTT_PowerDownTTT_IOControlTTT_ReadTTT_Write 同時(shí)編輯此文件夾下的test.reg文件,加入必要的注冊(cè)表項(xiàng):HKEY_LOCAL_MACHINEDriversBuiltIntest"DeviceArrayIndex"=dword:0"Prefix"="TTT""Dll"="test.Dll""Order"=dword:20好了,一個(gè)TTT設(shè)備的流接口驅(qū)動(dòng)就寫好了,在源程序文件夾中的DEF文件,RE

36、G文件,BIB文件,DB文件,DAT文件和編譯鏈接時(shí)需要的BAT文件都被PB生成好了,開發(fā)人員只要作些必要的修改即可以,非常方便。在BIB文件中添加項(xiàng)目,將所用到的文件加入BIN文件(一般放在Platform.bib。MyDev.dll $(_FLATRELEASEDIRMyDev.dll NK SH注:SampleDev為任意與其它項(xiàng)目不重名的字符串.每個(gè)函數(shù)名的前綴XXX可以是任意大寫的字符串,只要保證與注冊(cè)表中Prefix后面的值相同就行。編譯程序現(xiàn)在,已經(jīng)知道了需要實(shí)現(xiàn)哪些東西,一定想知道如何去實(shí)現(xiàn)它。一個(gè)最直接的方法就是在platform/BSP/drivers 下新建一個(gè)目錄,然后

37、在drivers目錄中的dirs文件中加入以你剛新建的目錄名。在剛新建的目錄下,新建你的C源代碼文件,在其中實(shí)現(xiàn)上面所述的函數(shù),及其功能。新建名稱分別為sources, makefile, mydev.def的文件。其內(nèi)容如下:makefile: 只需要這樣一行 !INCLUDE $(_MAKEENVROOTmakefile.defSources:這個(gè)文件很重要,內(nèi)容也多,最基本的一個(gè)文件該有如下內(nèi)容。TARGETNAME= MyDev(指定要生成的動(dòng)態(tài)庫的名稱TARGETTYPE=DYNLINK(指定要生成的是一個(gè)動(dòng)態(tài)庫(下面兩項(xiàng)指定需要與哪些動(dòng)態(tài)庫鏈接,一般要第一項(xiàng)就足夠了TARGETLI

38、BS=$(_COMMONSDKROOTlib$(_CPUINDPATHcoredll.lib SOURCELIBS= $(_COMMONOAKROOTlib$(_CPUINDPATHceddk.libDEFFILE=MyDev.def (指定def文件DLLENTRY=DllEntry(指定動(dòng)態(tài)庫的入口函數(shù)SOURCES=(請(qǐng)?jiān)谶@寫上你所有源文件的名字,它們將會(huì)被編譯接下來,為了測試我們的驅(qū)動(dòng)程序是否可以正常工作,還需要寫一個(gè)測試程序,再次為平臺(tái)新建一個(gè)WCE應(yīng)用程序項(xiàng)目TestTTT,寫入如下代碼并編譯為EXE文件:#include "stdafx.h"#include

39、"windows.h"int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow/ TODO: Place code here.HANDLE handle=CreateFile(_T("TTT1:",GENERIC_READ|GENERIC_WRITE,0, NULL,OPEN_EXISTING,0,NULL; ASSERT(handle;DWORD ret=0;TCHAR* pstr=_T("This is a TES

40、T of TTT Driver"WriteFile(handle,pstr,(_tcslen(pstr+1*sizeof(TCHAR,&ret,NULL;TCHAR ReadStr256;memset(ReadStr,0,sizeof(TCHAR*256;ret=0;ReadFile(handle,ReadStr,sizeof(ReadStr,&ret,NULL;MessageBox(NULL,ReadStr,_T("Test",MB_OK;CloseHandle(handle;return 0; 這只是一個(gè)簡單的演示程序,大家可以參考著完成自己的

41、驅(qū)動(dòng)程序,如簡單的控制IO口的驅(qū)動(dòng)程序等等.驅(qū)動(dòng)程序就介紹到這里,驅(qū)動(dòng)的編寫不是一朝一夕的事情,需要不斷的努力和付出,這樣才能成為所謂的高手,另外一定要仔細(xì)閱讀PB的練級(jí)幫助文檔,該文檔基本上可以找到你所需要的所有東西. 第5章 WINDOWS CE應(yīng)用程序開發(fā)5.1 本地應(yīng)用程序與可托管應(yīng)用程序Windows CE支持傳統(tǒng)的本地應(yīng)用程序和應(yīng)用了Microsoft.NET技術(shù)的托管應(yīng)用程序.為了開發(fā)本地應(yīng)用程序,需要使用eVC+4.0開發(fā)工具, eVC+將C+代碼直接編譯為CPU指令,它使用win32應(yīng)用程序編程接口(win32API來訪問Windows CE 功能,同時(shí)它還是用MFC或ATL

42、庫幫助開發(fā)GUI和COM應(yīng)用程序. 為了開發(fā)托管應(yīng)用程序,需要使用VS.NET 2003開發(fā)工具,它集成了Microsoft .NET Compact Framework 1.0開發(fā)工具包,它編譯出來的可執(zhí)行代碼為獨(dú)立與CPU的中間語言代碼,通常,托管應(yīng)用程序不能直接訪問win32API,在運(yùn)行是,這些中間語言代碼必須通過.NET Compact Framework庫將它轉(zhuǎn)換為機(jī)器語言代碼才能訪問操作系統(tǒng)功能.5.2本地應(yīng)用程序開發(fā)Windows CE的本地應(yīng)用程序開發(fā)主要涉及以下幾個(gè)方面:1.從Platform Builder導(dǎo)出SDK2.安裝SDK到eVC+3.Win32編程下面對(duì)這3個(gè)方面進(jìn)行闡述當(dāng)開發(fā)著使用eVC+工具編寫Windows CE應(yīng)用程序是,必須知道自己所開發(fā)的程序運(yùn)行在什么樣的硬件平臺(tái)上,以及目標(biāo)平臺(tái)具有什么樣的操作系統(tǒng)功能,否則,開發(fā)者開發(fā)的應(yīng)用程序很可能不能在目標(biāo)平臺(tái)上運(yùn)行.那么eVC+在編譯是怎么知道目標(biāo)平臺(tái)的特性呢?答案就是通過Platform Builder想eVC+導(dǎo)出應(yīng)用程序要運(yùn)行平臺(tái)的SDK.下面就說一下如何從Platform Builder中導(dǎo)出SDK,(1在platform菜單中選擇Configure SDK,如下圖

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論