文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)02-0014-04
Windows Embedded Compact 7(以下簡(jiǎn)稱Compact 7)操作系統(tǒng)在訪問(wèn)底層硬件時(shí),,不直接訪問(wèn)硬件,而是通過(guò)抽象出來(lái)的函數(shù)訪問(wèn),。抽象出來(lái)的函數(shù)層,,就是通常所說(shuō)的板支持包BSP(Board Support Package)[1]。BSP介于底層硬件和操作系統(tǒng)之間,,完成硬件初始化并將控制權(quán)切換給操作系統(tǒng),。由于嵌入式系統(tǒng)的底層硬件具有無(wú)標(biāo)準(zhǔn)、非規(guī)范等特性,,操作系統(tǒng)都存在著BSP移植的問(wèn)題,,這就要求BSP開(kāi)發(fā)人員在BSP開(kāi)發(fā)過(guò)程中熟練掌握具體的硬件原理和軟件實(shí)現(xiàn)方法。
Compact 7與之前的Windows CE版本一樣,,提供了一整套平臺(tái)開(kāi)發(fā)工具Platform Builder,,使開(kāi)發(fā)人員能夠快速靈活地創(chuàng)建解決方案[2]。而且Platform Builder本身也提供了多種目標(biāo)板的BSP樣例,,可以在開(kāi)發(fā)移植BSP時(shí)作參考,。
1 OMAP3530處理器
TI公司推出的OMAP3530是一款技術(shù)先進(jìn)的高性能嵌入式異構(gòu)雙核處理器,主要由一個(gè)600 MHz的CortexTM-A8 ARM核和一個(gè)430 MHz的DSP 核組成,。嵌入式操作系統(tǒng)在ARM核上運(yùn)行,,與數(shù)字信號(hào)處理相關(guān)的任務(wù)則由DSP核負(fù)責(zé)。盡管OMAP3530是一個(gè)異構(gòu)多核架構(gòu)的微處理器,,但DSP核對(duì)于基于ARM核開(kāi)發(fā)的工程師而言是透明的,。在軟件工具鏈中,TI引入了DSP橋的概念,。DSP橋是針對(duì)ARM應(yīng)用程序開(kāi)發(fā)提供的一組面向DSP算法的應(yīng)用程序接口(API),,以便應(yīng)用程序獲取DSP核的計(jì)算資源和數(shù)據(jù)資源。
2 Compact 7操作系統(tǒng)
Windows Embedded Compact 7是Windows CE 6.0的后續(xù)產(chǎn)品,,它不僅是一個(gè)功能強(qiáng)大的實(shí)時(shí)操作系統(tǒng),,而且還為開(kāi)發(fā)者提供了全套開(kāi)發(fā)工具。作為Windows CE家族的換代產(chǎn)品,,Compact 7繼承了之前Windows CE系統(tǒng)的優(yōu)良傳統(tǒng),,又在其上增加了對(duì)ARMv7構(gòu)架的支持;對(duì)Windows CE先前版本的強(qiáng)大功能進(jìn)行了進(jìn)一步的擴(kuò)充和豐富,,如支持多點(diǎn)觸控,、優(yōu)化電源管理等。
與Windows CE 6.0不同,,Compact 7的平臺(tái)開(kāi)發(fā)工具Platform Builder依托于Visual Studio 2008,,內(nèi)嵌的Silverlight for Windows Embedded有利于減輕開(kāi)發(fā)者開(kāi)發(fā)界面的負(fù)擔(dān)。在軟件開(kāi)發(fā)上,,Compact 7徹底摒棄傳統(tǒng)的MFC程序框架,,轉(zhuǎn)而全面支持.Net framework,。高效的開(kāi)發(fā)框架,將最大限度地提高開(kāi)發(fā)者的工作效率,,有助于提高產(chǎn)品的市場(chǎng)競(jìng)爭(zhēng)力,。
3 OMAP3530開(kāi)發(fā)板硬件構(gòu)成
開(kāi)發(fā)板硬件平臺(tái)主要以TI公司的OMAP3530雙核處理器為核心,配有256 MB SDRAM和512 MB Nand Flash用以啟動(dòng)系統(tǒng)和存儲(chǔ)運(yùn)行程序,。同時(shí),,還配有電源管理、USB,、UART,、以太網(wǎng)控制器、液晶屏等外圍電路,?;贠MAP3530處理器開(kāi)發(fā)板的硬件結(jié)構(gòu)框圖如圖1所示。
4 Compact 7操作系統(tǒng)下BSP開(kāi)發(fā)與移植
Compact 7中BSP是由Boot Loader,、OEM適配層,、設(shè)備驅(qū)動(dòng)程序,、內(nèi)核獨(dú)立傳輸層(KITL)以及鏡像配置文件五部分組成[3],。關(guān)于各部分之間的相互聯(lián)系以及與硬件平臺(tái)之間的關(guān)系如圖2所示。
4.1 Clone BSP
Compact 7提供了兩種方法開(kāi)發(fā)BSP,,一種是從零開(kāi)始進(jìn)行BSP開(kāi)發(fā)的方法,,另一種是克隆已有的BSP再進(jìn)行移植的方法。Clone BSP實(shí)質(zhì)就是對(duì)現(xiàn)有的BSP進(jìn)行復(fù)制并按照開(kāi)發(fā)者要求改變BSP的名稱等信息,。Clone BSP保留了原有BSP的程序架構(gòu)和全部代碼,,開(kāi)發(fā)者只需對(duì)BSP中部分代碼進(jìn)行修改添加即可實(shí)現(xiàn)新開(kāi)發(fā)板的功能,簡(jiǎn)化了開(kāi)發(fā)流程,,提高了開(kāi)發(fā)效率,。考慮到從零開(kāi)始開(kāi)發(fā)BSP相當(dāng)困難,,OMAP3530開(kāi)發(fā)板的BSP開(kāi)發(fā)就采用Clone相似平臺(tái)的BSP的方法進(jìn)行移植,。這樣的實(shí)現(xiàn)方法可以大幅度降低開(kāi)發(fā)BSP的難度并縮短開(kāi)發(fā)周期。
具體方法是,,在Platform Builder中使用其自帶的Clone BSP工具,,克隆TI公司提供的OMAP3530樣例BSP,并自行定義名稱(如MyBSP),,然后設(shè)置相關(guān)描述(如平臺(tái)目錄名稱,、供應(yīng)商名稱以及版本號(hào)等信息)。如果設(shè)置信息合法,,單擊Clone按鈕后會(huì)提示成功克隆BSP,??寺〕龅腂SP位于%_WINCEROOT%\PLATFORM目錄下。
4.2 移植Boot Loader
BSP移植首先要實(shí)現(xiàn)Boot Loader的功能,。Boot Loader是一段啟動(dòng)引導(dǎo)程序,,主要在Compact 7系統(tǒng)加載前初始化相關(guān)硬件,并把系統(tǒng)鏡像加載到內(nèi)存中運(yùn)行,。根據(jù)鏡像boot的方式,,Boot Loader分為nboot、eboot和uboot等,。
OMAP3530處理器內(nèi)嵌的RAM只有64 KB,,對(duì)Boot Loader生成的可執(zhí)行文件而言過(guò)于小,無(wú)法將其加載到內(nèi)部RAM中,,所以只能使用外部RAM進(jìn)行加載,。但OMAP3530上電時(shí)不能自動(dòng)初始化memory controller,無(wú)法讀寫(xiě)外部RAM,。因此,,需要一個(gè)程序負(fù)責(zé)初始化外部的RAM控制器,把可執(zhí)行文件從 Nand Flash或者SD卡中讀取到外部RAM中,,然后跳轉(zhuǎn)到入口處執(zhí)行,。實(shí)現(xiàn)這一功能的程序稱為x-Loader,x-Loader是Compact 7啟動(dòng)之后運(yùn)行的第一段程序,,實(shí)質(zhì)上是一個(gè)精簡(jiǎn)版的Boot Loader,。x-Loader運(yùn)行的第一個(gè)函數(shù)是startup()函數(shù),startup()采用匯編語(yǔ)言編寫(xiě),,首要功能是對(duì)目標(biāo)系統(tǒng)的CPU進(jìn)行最基本的初始化,。例如,清空TLB和cache,、關(guān)閉中斷,、配置PLL、設(shè)置內(nèi)存控制器,、設(shè)置跳轉(zhuǎn)到main的函數(shù)地址等,。OMAP3530開(kāi)發(fā)板上電后,CPU會(huì)自動(dòng)從Nand Flash或者SD卡中加載x-Loader到內(nèi)部RAM,,然后執(zhí)行初始化任務(wù),,最后將控制權(quán)交給Boot Loader。Startup()函數(shù)實(shí)現(xiàn)main函數(shù)跳轉(zhuǎn)地址代碼如下:
ldr sp, =( XLDR_STACK_PA+XLDR_STACK_SIZE)
b XLDRMain
其中,,XLDR_STACK_PA和XLDR_STACK_ SIZE是任務(wù)堆棧起始地址和大小,,系統(tǒng)通過(guò)使sp指針指向x-Loader中的任務(wù)堆棧起始地址的方法實(shí)現(xiàn)程序的跳轉(zhuǎn)。
x-Loader位于BSP目錄下的boot文件夾中,,需要修改其中的platform.c和main.c兩個(gè)文件,。platform.c的作用是對(duì)OMAP3530功能進(jìn)行設(shè)置,,文件中包括PinMuxSetup()、GpioSetup(),、ClockSetup(),、MemorySetup()等幾個(gè)重要的函數(shù)。
PinMuxSetup()函數(shù)專門(mén)用于設(shè)置引腳功能,,這樣做的好處是可以有統(tǒng)一的啟動(dòng)代碼并且不必?fù)?dān)心在啟動(dòng)過(guò)程中對(duì)復(fù)用引腳功能的再度修改,。其實(shí)現(xiàn)樣例代碼如下:
OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D0,
(INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0)),;
OUTREG16函數(shù)用于設(shè)置OMAP3530 中的16 bit寄存器,,該函數(shù)通過(guò)CONTROL_PADCONF_SDRC_D0獲得處理器相應(yīng)管腳的寄存器地址;通過(guò)設(shè)置INPUT_ENABLE,、PULL_INACTIVE等參數(shù)來(lái)實(shí)現(xiàn)對(duì)管腳屬性的定義,;通過(guò)設(shè)置MUX_MODE_X的方法實(shí)現(xiàn)管腳功能的定義。具體MUX_MODE_X代表的功能定義,,可參閱OMAP3530技術(shù)手冊(cè),。
MemorySetup()函數(shù)用于初始化通用存儲(chǔ)控制器(GPMC)和外部RAM(SDRC)。由于GPMC信號(hào)在Flash和以太網(wǎng)控制器上都用到,。因此,,在MemorySetup()函數(shù)中需要對(duì)GPMC片選信號(hào)進(jìn)行設(shè)置。實(shí)現(xiàn)樣例代碼如下:
OUTREG32(&pGpmc->GPMC_CONFIG1_3,,
BSP_GPMC_LAN_CONFIG1),;
OUTREG32函數(shù)用于設(shè)置OMAP3530 中的32 bit寄存器,通過(guò)GPMC_CONFIG獲得設(shè)置寄存器的地址,;通過(guò)宏定義BSP_GPMC_LAN+CONFIG1設(shè)置具體數(shù)值。
main.c文件是x-Loader的主程序,,在RELEASE模式下能夠生成MLO執(zhí)行文件,,在DEBUG模式下編譯配置文件 sources 跳過(guò)了對(duì)其的編譯。因?yàn)閤-Loader對(duì)大小有要求,, 若DEBUG 編譯文件過(guò)大,,即使生成可執(zhí)行文件也無(wú)法加載到OMAP3530內(nèi)部RAM中。
x-Loader移植完成后,,需要進(jìn)行Boot Loader的移植,。為了與x-Loader一致,Boot Loader下執(zhí)行的第一個(gè)函數(shù)也是Startup()函數(shù),。Boot Loader下的Startup()函數(shù)同樣是采用匯編語(yǔ)言編寫(xiě)的,,主要完成靜態(tài)邏輯地址到物理地址的映射以及跳轉(zhuǎn)到BootloaderMain函數(shù)執(zhí)行的功能。
Boot Loader開(kāi)發(fā)重點(diǎn)是實(shí)現(xiàn)OEMPlatformInit()函數(shù)用以硬件初始化,,這個(gè)函數(shù)與硬件具有高度的相關(guān)性[4],??偟膩?lái)說(shuō),OEMPlatforminit()函數(shù)需要完成五項(xiàng)初始化任務(wù):首先是通過(guò)OEMEthGetSecs()函數(shù)初始化定時(shí)器,,其次初始化Nand Flash存儲(chǔ)器,,再次是復(fù)位外圍設(shè)備,然后初始化用于下載鏡像的以太網(wǎng)控制器,,最后初始化操作系統(tǒng)的內(nèi)存空間,。
為了使Boot Loader支持以太網(wǎng)下載方式,需要實(shí)現(xiàn)與以太網(wǎng)控制器相關(guān)的函數(shù),。開(kāi)發(fā)板以太網(wǎng)控制器選用SMSC公司的Lan9220芯片,。其具體的實(shí)現(xiàn)過(guò)程如下:
(1)在%_WINCEROOT\PLATFORM\MyBSP\SRC\BOOT\
EBOOT下添加Lan9220dbg.c。
(2)在Lan9220dbg.c文件中實(shí)現(xiàn)LAN9220_Init,、LAN-
9220_SendFrame和LAN9220_GetFrame 3個(gè)函數(shù),。
(3)在%_WINCEROOT\PLATFORM\MyBSP\SRC\INC下的kitl_cfg.h文件中聲明上述3個(gè)函數(shù),并定義BSP_ETHDRV_LAN9220結(jié)構(gòu)體,。結(jié)構(gòu)體定義如下:
#define BSP_ETHDRV_LAN9220 {
(OAL_KITLETH_INIT) LAN9220_Init, NULL, NULL,
(OAL_KITLETH_SEND_FRAME) LAN9220_SendFrame,
(OAL_KITLETH_GET_FRAME) LAN9220_GetFrame,
NULL, NULL, NULL, NULL, NULL, NULL }
(4)在%_WINCEROOT\PLATFORM\MyBSP\SRC\BOOT\
EBOOT下的boot_cfg.h文件中添加BSP_ETHDRV_LAN-
9220到g_bootDevices內(nèi)容中即可,。
初始化傳輸端口通過(guò)修改OEMPreDownload()函數(shù)實(shí)現(xiàn),在OEMPreDownload函數(shù)中首先需要為硬件平臺(tái)指點(diǎn)一個(gè)靜態(tài)IP地址,,其次通過(guò)設(shè)置g_bootCfg.kitlFlags變量來(lái)設(shè)置IP協(xié)議,,然后將boot方式設(shè)置成以太網(wǎng)下載模式,最后調(diào)用OEMLaunch函數(shù)來(lái)下載鏡像,。OEMLaunch函數(shù)的功能是下載鏡像,,并將程序計(jì)數(shù)器的指針直接設(shè)置到操作系統(tǒng)鏡像的開(kāi)始地址。它是啟動(dòng)操作系統(tǒng)前Boot Loader的最后一個(gè)函數(shù),,沒(méi)有返回值,。可以參考微軟提供的標(biāo)準(zhǔn)BSP中的代碼實(shí)現(xiàn)該函數(shù),。實(shí)現(xiàn)此函數(shù)后,,Boot Loader的功能基本完成。
4.3 移植OEM適配層
OEM適配層OAL(OEM Adaptation Layer)邏輯上位于Compact 7內(nèi)核和硬件平臺(tái)之間,。物理上可以生成可執(zhí)行文件(NK.EXE),。OAL的出現(xiàn)大大方便了操作系統(tǒng)和硬件平臺(tái)之間的通信。OAL還用來(lái)處理中斷,、控制時(shí)鐘,、管理電源、控制I/O接口等,。
通常情況下,,OAL創(chuàng)建的方法就是復(fù)制與自己開(kāi)發(fā)平臺(tái)相近且已經(jīng)成功應(yīng)用的OAL文件,然后進(jìn)行適當(dāng)?shù)男薷模琌AL文件位于%_WINCEROOT\PLATFORM\MyBSP\SRC\OAL目錄下,。移植過(guò)程中需要修改OEMInit函數(shù),,該函數(shù)是在OEM適配層中初始化中斷、時(shí)鐘,、KITL,、計(jì)數(shù)器以及看門(mén)狗功能的。需要注意的是,,如果要打開(kāi)串口的debug功能,,也要在OEMInit函數(shù)中進(jìn)行設(shè)置,將OEMDeinitDebugSerial()函數(shù)注釋掉,。
4.4 開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序
BSP驅(qū)動(dòng)程序?qū)儆趦?nèi)置驅(qū)動(dòng),,與流驅(qū)動(dòng)不一樣的是,它不用設(shè)備管理器來(lái)管理,,也不用導(dǎo)出與流驅(qū)動(dòng)程序類似的API接口,。此類驅(qū)動(dòng)通常放在硬件平臺(tái)的目錄之下,如LCD顯示,、USB接口驅(qū)動(dòng)就放在SRC\DRIVERS目錄下,。
以Touch的開(kāi)發(fā)為例,簡(jiǎn)要介紹Compact 7下內(nèi)置驅(qū)動(dòng)的開(kāi)發(fā)過(guò)程,。Compact 7中Touch驅(qū)動(dòng)采用分層方式實(shí)現(xiàn),,分為MDD(Model Device Driver)層和PDD(Platform Dependent Driver)層,分層結(jié)構(gòu)方便了驅(qū)動(dòng)程序的維護(hù)和移植,。Touch驅(qū)動(dòng)分層示意圖如圖3所示,。
Touch驅(qū)動(dòng)程序接收用戶的觸摸信息,并將其轉(zhuǎn)換為觸摸屏上的位置坐標(biāo)信息,,再傳給圖形,、窗口和事件的子系統(tǒng)GWES(Graphics,Windowing, and Events Subsystem)模塊,。主要的工作是處理用戶交互和圖形輸出等任務(wù),。觸摸屏驅(qū)動(dòng)就是被它加載的,同時(shí)被GWES加載的還有鼠標(biāo)驅(qū)動(dòng),、鍵盤(pán)驅(qū)動(dòng)以及顯示設(shè)備驅(qū)動(dòng)。
對(duì)于初學(xué)者只需實(shí)現(xiàn)PDD層函數(shù)以及與MDD層通信的DDSI函數(shù)即可,。MDD層與GWES模塊通信的DDI函數(shù)已由微軟實(shí)現(xiàn),。這樣驅(qū)動(dòng)開(kāi)發(fā)的工作量會(huì)少很多,而代碼的可靠性則有了更好的保證,。
Compact 7觸摸屏驅(qū)動(dòng)程序采用中斷方式對(duì)按下?tīng)顟B(tài)進(jìn)行檢測(cè),,如果檢測(cè)到觸摸動(dòng)作時(shí)將產(chǎn)生中斷并觸發(fā)一個(gè)事件通知一個(gè)工作線程開(kāi)始采集數(shù)據(jù)。同時(shí),,驅(qū)動(dòng)將打開(kāi)一個(gè)定時(shí)器,,若觸摸動(dòng)作仍然存在,,則定時(shí)觸發(fā)同一個(gè)事件通知工作線程采集數(shù)據(jù)。驅(qū)動(dòng)中采用了觸摸屏中斷以及定時(shí)器中斷2個(gè)中斷源,,不僅可以監(jiān)控觸摸筆按下和抬起的動(dòng)作,,還可以檢測(cè)到觸摸屏按下時(shí)的拖動(dòng)軌跡[5]。
由于OMAP3530開(kāi)發(fā)板與觸摸屏之間采用I2C總線通信,,而Compact 7提供的樣例是以SPI接口進(jìn)行數(shù)據(jù)通信,,因此,需要修改PDDInitializeHardware函數(shù)和PDDGetControllerData函數(shù),。對(duì)SPI接口的讀寫(xiě)改為對(duì)I2C總線的讀寫(xiě),;之后在PDDTouchPanelGetPoint函數(shù)中修改代碼,按照具體觸摸屏控制芯片的數(shù)據(jù)定義格式進(jìn)行坐標(biāo)轉(zhuǎn)換,;最后更改.reg文件中的注冊(cè)信息,,定義管腳號(hào)、驅(qū)動(dòng)加載位置等,。Compact 7系統(tǒng)啟動(dòng)過(guò)程中加載GWES模塊后,,GWES模塊將根據(jù)注冊(cè)表的信息加載觸摸屏驅(qū)動(dòng)。
4.5 移植內(nèi)核獨(dú)立傳輸層
在Windows CE系統(tǒng)中使用了內(nèi)核獨(dú)立傳輸層KITL(Kernel Independent Transport Layer)技術(shù),,其設(shè)計(jì)目標(biāo)是向開(kāi)發(fā)者提供一種簡(jiǎn)單的開(kāi)發(fā)方式以支持調(diào)試服務(wù),。從Windows CE 6.0開(kāi)始,KITL模塊已經(jīng)獨(dú)立出OAL,,在操作系統(tǒng)運(yùn)行時(shí)已經(jīng)有了一個(gè)獨(dú)立的KITL.dll動(dòng)態(tài)鏈接庫(kù),。Compact 7操作系統(tǒng)繼承了這一特性,同時(shí)也提供了大量的程序樣例用于開(kāi)發(fā)參考,。
KITL的開(kāi)發(fā)過(guò)程只需要完善OEM部分代碼即可,,這部分代碼位于\SRC\KITL目錄下。用戶需要實(shí)現(xiàn)OEMKitlStartup函數(shù),、OEMKitlInit函數(shù),,同時(shí)需要構(gòu)造相關(guān)結(jié)構(gòu)體數(shù)據(jù)。OEMKitlStartup的功能是構(gòu)造實(shí)際參數(shù)的數(shù)據(jù),,如代表KITL連接設(shè)備的標(biāo)識(shí)符字符串,、記錄用戶對(duì)系統(tǒng)KITL功能配置的數(shù)據(jù)以及所有可選KITL連接設(shè)備的硬件位置。OEMKitlInit的功能是構(gòu)造一個(gè)設(shè)置KITL傳輸層端口的結(jié)構(gòu)體數(shù)據(jù),。
OMAP3530開(kāi)發(fā)板的KITL采用中斷方式進(jìn)行驅(qū)動(dòng),。中斷方式在OEMKitlStartup函數(shù)中設(shè)置。具體代碼如下:
// Prepare interrupt
pGPIORegs = OALPAtoUA(BSP_ETHER_GPIO_PA);
SETREG32(&pGPIORegs->OE,
1 << (BSP_IRQ_ETHER_KITL % 32));
// Interrupt on falling edge
SETREG32(&pGPIORegs->FALLINGDETECT,
1 << (BSP_IRQ_ETHER_KITL % 32));
OEMKitlEnableClocks(FALSE);
之后在OEMKitlEnableClocks函數(shù)中修改IRQ管腳對(duì)時(shí)鐘的響應(yīng),。具體代碼如下:
// IRQ pin
clockRoutines.pfnEnableDeviceFClock(OMAP_DEVICE_GPIO,
bEnable);
其中宏定義BSP_IRQ_ETHER_KITL和OMAP_DEVICE_GPIO的值由開(kāi)發(fā)板上實(shí)際連接到LAN9220的中斷信號(hào)的管腳決定,。移植過(guò)程中對(duì)這兩個(gè)宏定義進(jìn)行修改即可實(shí)現(xiàn)KITL的功能。
4.6 設(shè)置配置文件
當(dāng)創(chuàng)建一個(gè)Compact 7的工程時(shí),可以通過(guò)添加環(huán)境變量,、修改.bib和.reg等文件來(lái)重新配置BSP,。Compact 7將配置文件分為兩類,一類是源代碼配置文件,,如Dirs文件,、Makefile文件以及Sources文件;另一類是鏡像配置文件,,如.bib文件,、.reg文件、.dat文件等,。開(kāi)發(fā)人員必須理解相關(guān)配置文件的作用和使用方法才能合理地配置系統(tǒng)資源,。
至此,BSP的開(kāi)發(fā)流程已基本完成,。開(kāi)發(fā)移植好的BSP要在Platform Builder中編譯生成可以在硬件開(kāi)發(fā)平臺(tái)上運(yùn)行的二進(jìn)制代碼,,通過(guò)SD卡將MLO和eboot.nb0下載到Nand Flash上,然后再通過(guò)以太網(wǎng)下載NK.bin到開(kāi)發(fā)板上,。
開(kāi)發(fā)BSP 是一個(gè)基于具體硬件和軟件的復(fù)雜過(guò)程,,需要開(kāi)發(fā)者對(duì)硬件和軟件知識(shí)都有較為深入的了解[6]。BSP開(kāi)發(fā)的正確性將直接影響到系統(tǒng)運(yùn)行的穩(wěn)定性,。
參考文獻(xiàn)
[1] 周建設(shè).Windows CE設(shè)備驅(qū)動(dòng)及BSP開(kāi)發(fā)指南[M].北京:中國(guó)電力出版社,,2009.
[2] 陳瑞,張永瑞,,歐陽(yáng)雄.基于XSCALE架構(gòu)處理器WinCE系統(tǒng)BSP開(kāi)發(fā)[J].電子科技,,2006(2).
[3] Microsoft.BSP porting guide for Windows Embedded Compact 7[Z].2010.
[4] 李大為.Windows CE工程實(shí)踐完全解析[M].北京:中國(guó)電力出版社,2008.
[5] 張毅,,王海濤.基于S3C2410A的WinCE 5.0下觸摸屏驅(qū)動(dòng)的實(shí)現(xiàn)[J].重慶郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),,2008(6).
[6] 李海林,趙惠林,,熊文峰.基于XScale PXA255處理器WinCE 420系統(tǒng)BSP開(kāi)發(fā)[J].艦船電子工程,,2006(3).