新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > WinCE嵌入式開發(fā)程序入門

WinCE嵌入式開發(fā)程序入門

作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

在初始化期間(導(dǎo)入),Windows CE創(chuàng)造一個獨立的被所有程序共享的4GB 虛擬地址空間。當(dāng)程序引用一個虛擬的地址時,它被內(nèi)核記錄在物理的內(nèi)存上。 這使得應(yīng)用程序軟件開發(fā)者不必去考慮目標(biāo)系統(tǒng)內(nèi)存的物理的布局。雖然所有程序共享單一地址空間,應(yīng)用程序仍然可避免相互誤用。Windows CE 通過改變每頁的保護來保護程序內(nèi)存,而不是分配給每一程序不同地址空間。 作為應(yīng)用程序開發(fā)者,你可能不會太在乎目標(biāo)系統(tǒng)的內(nèi)存的物理的結(jié)構(gòu)。 內(nèi)存可以全部是隨機存取內(nèi)存,或者它可能包括閃存卡或者硬盤驅(qū)動器。Windows CE操作系統(tǒng)為你管理內(nèi)存資源,同時WIN32 API 向你提供必要的分配、使用和釋放的內(nèi)存的接口。

然而,作為一個嵌入式的系統(tǒng)的設(shè)計者,你將需要細心考慮將在你新的硬件平臺上執(zhí)行的應(yīng)用程序的內(nèi)存需要,并且全面考慮成本、速度和可靠性,平衡各種目標(biāo)的沖突。 如果你為使用Windows CE開發(fā)一個新的硬件平臺 ,Windows CE的面向Visual C++ 的嵌入式軟件包包括資源可以幫助你做出這些決策,并且從而構(gòu)成操作系統(tǒng)。

無論你的系統(tǒng)內(nèi)存的配置如何,ROM(只讀內(nèi)存)將占用十分重要的地位。不同于其它的32位Windows操作系統(tǒng),Windows CE操作系統(tǒng)的代碼在只讀內(nèi)存中,并且在那個只讀內(nèi)存中原地執(zhí)行。 依據(jù)你的產(chǎn)品需要,你也能選擇在只讀內(nèi)存中放置應(yīng)用程序代碼。 例如,Pocket Word,Pocket Excel和其它應(yīng)用程序程序,包括在手持電腦只讀內(nèi)存中被提供的。

存儲在ROM中的程序組在Windows CE下當(dāng)?shù)貓?zhí)行,所以嵌入式系統(tǒng)的設(shè)計者能夠只占用很少的RAM用于堆棧存儲的需要。相應(yīng)地,你的嵌入式應(yīng)用程序可以利用RAM既作為程序的內(nèi)存又可作臨時存儲空間。

為了進一步的增加應(yīng)用程序軟件的性能, Windows CE采用按需求將內(nèi)存分葉;操作系統(tǒng)僅僅需要解壓縮并且裝入基于RAM的一小部分程序準(zhǔn)備執(zhí)行。ROM和 基于RAM的程序的靈活性與速度意味著基于Windows CE的設(shè)備能夠被構(gòu)造成各種內(nèi)存結(jié)構(gòu)形式。

手持電腦的內(nèi)存結(jié)構(gòu)

典型的Windows CE的硬件平臺的內(nèi)存結(jié)構(gòu)是與基于 Windows系統(tǒng)的臺式電腦的內(nèi)存結(jié)構(gòu)十分不同的。 為了知道內(nèi)存通常如何在Windows中被處理的 ,考查基于Windows CE的最普通的代表性的設(shè)備-手持電腦,是很有用的。

在手持電腦中,RAM被分割成兩個主要的部分:存儲內(nèi)存和程序內(nèi)存。 向兩部分分配的RAM的量能被手持電腦用戶修改(在限制范圍內(nèi))。 這個RAM的劃分圖如圖4所示。

在手持電腦中的存儲內(nèi)存類似于臺式電腦的硬盤RAM。 它被用來存儲數(shù)據(jù)和非系統(tǒng)應(yīng)用程序。它的三段中每一段被不同的一套WIN32 API 訪問函數(shù):

Windows CE系統(tǒng)寄存器類似于Windows NT和Windows 95的操作系統(tǒng)的寄存器。你能利用WIN32 寄存器函數(shù)來操縱寄存器中鍵和數(shù)值。

被用戶安裝的應(yīng)用程序和數(shù)據(jù)在一般文件存儲段中。Windows CE文件系統(tǒng)API 是標(biāo)準(zhǔn)WIN32 文件系統(tǒng)的子集函數(shù)。

對于數(shù)據(jù)庫應(yīng)用程序,由Windows CE 數(shù)據(jù)庫API來存儲被管理存儲。這API 對Windows CE是唯一的 ,并且在其它的WIN32 平臺中沒有。

程序內(nèi)存被用于系統(tǒng)和非系統(tǒng)程序的堆棧存儲。 非系統(tǒng)應(yīng)用程序從存儲內(nèi)存(或者或許PC卡)被取得,非壓縮的并且被裝入要執(zhí)行程序內(nèi)存中。

意外情況處理

意外情況處理是強大的編程技術(shù),相應(yīng)一套的WIN32 API 起函數(shù)能容易的發(fā)現(xiàn)未預(yù)料到的錯誤狀況,并且使之恢復(fù)。結(jié)構(gòu)化的意外情況處理,允許危險的段的代碼可能由于硬件資源的問題、設(shè)備的沖突和微小的編碼錯誤而導(dǎo)致失敗,以使這部分程序與其余的應(yīng)用程序分開。這保護了應(yīng)用程序,使之免于過早的終止或者產(chǎn)生敏感的系統(tǒng)問題。

結(jié)構(gòu)化的意外情況處理包括定義一系列聲明作為保護,并且為第一套的聲明定義了另一個套聲明作為意外情況句柄。 意外情況句柄定義了一個或多個聲明來保障系統(tǒng)的運行,而不管保護聲明的現(xiàn)有的狀態(tài)。

在大多數(shù)32 位Windows平臺上應(yīng)用WIN32 API 的程序員在運用意外情況句柄的時候通常有兩種選擇,用C或 C++ 編寫應(yīng)用程序,并且利用WIN32提供的處理意外情況的宏,或者利用C++ 編寫應(yīng)用程序,并且使用C++ 語言定義的意外情況處理函數(shù)。

對于這種程序的編寫,Windows CE的開發(fā)者因無法訪問C++的(面向Windows CE的Visual C++ 目前還不支持意外情況處理,所以必須使用WIN32 API的意外情況處理宏。

為了應(yīng)用WIN32意外情況處理,你將使用一套在WIN32 API 中被定義的宏。 下面一段代碼顯示其基本概念:

_try {

// The statements in here have a possibility of failure

// and so are guarded.

}

__finally {

// This is the exception handler. This code will execute

// after the guarded statements, no matter what happened

// in the guarded block of code above.

}

// This code will execute normally if the program flow allows

// it (no goto, exit, etc.)

__try 以及__finally 宏產(chǎn)生了使用意外情況句柄的所必要的底層代碼。

意外情況的處理對諸如在嵌入式的應(yīng)用程序中的那些普通的多線程序是有用的。WIN32結(jié)構(gòu)化意外情況處理宏 是一種容易并且強大的保護應(yīng)用程序使之免受未預(yù)料到的失敗的方法。

設(shè)備處理

有無數(shù)硬件設(shè)備(外圍設(shè)備)與應(yīng)用Windows的平臺(Windows NT以及 Windows 95)臺式機是兼容的,并且每一年都有更多的東西在市場上涌現(xiàn)。而Windows CE的平臺,通常不支持臺式計算機支持的設(shè)備的很多品種的外圍硬件。 然而,為一嵌入式的的系統(tǒng)創(chuàng)造可靠的設(shè)備接口在嵌入式的程序設(shè)計的過程中,是比較富有挑戰(zhàn)性的部分。 這部分地因為典型的嵌入式的系統(tǒng)接口的時序與其它可操作性的需要遠比臺式電腦計算系統(tǒng)和應(yīng)用程序的更難。

幸運地,WIN32 API 提供了一套豐富使設(shè)備接口方法,使得設(shè)備接口程序?qū)懫饋砀菀撞⑦m合于特定嵌入式的系統(tǒng)的需要。

WIN32 API是如何幫助的 WIN32 API在你的硬件平臺為你提供一套一致的基于流的接口。 為了使用設(shè)備,你首先利用適合于設(shè)備類型的函數(shù)打開它。 對于大多數(shù)設(shè)備,你利用的函數(shù)是在下列例子中的CreateFile 函數(shù):



關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉