[摘 要]: 藍牙通訊技術在嵌入式產(chǎn)品中的應用具有極為廣闊的前景,微軟公司的Windows CE.NET已經(jīng)成為了主流的嵌入式操作系統(tǒng)之一。論文給出了在 Visual Studio 2005中利用托管碼并分別采用P/Invoke技術、微軟藍牙嵌入式工具包、OpenNETCF類庫和利用本機碼來開發(fā) Windows CE.NET操作系統(tǒng)下藍牙通訊模塊的幾種方法,并在其中對P/Invoke技術、托管碼開發(fā)、本機碼開發(fā)等幾個關鍵技術進行了闡述。最 后給出了利用托管碼和本機碼開發(fā)藍牙通訊模塊這幾種方法的優(yōu)劣比較和分析。其內(nèi)容對于在Windows mobile平臺下開發(fā)藍牙設備間的通訊具有一定 實用價值。
關鍵詞:藍牙Windows mobile P/Invoke 托管碼 本機碼
0 引 言
自1998年,世界九大電子產(chǎn)業(yè)巨頭共同發(fā)起藍牙特殊利益集團SIG后,在短短不到十年之內(nèi),藍牙技術已經(jīng)被應用到如信息家電、電子商務、汽車、航空、醫(yī) 療、交通等多個領域。在移動計算方面,藍牙技術采用了一種極為經(jīng)濟的形式解決了無線通訊“最后10m”的問題,從而替代了各種移動信息電子設備之間的電 纜。因此,藍牙技術在移動計算領域的應用將十分廣闊,它的應用開發(fā)也就有很大的實際意義。
微軟公司從1996年起開發(fā)了嵌入式操作系統(tǒng)Windows CE 1.0開始,憑借著其在PC市場上的成功經(jīng)驗和Windows CE類似于PC機上操作系統(tǒng)的作者簡介:白 煒(1980-),男,碩士研究生,研究方向為嵌入式系統(tǒng)。
導師簡介:白萬民,教授,研究方向為嵌入式系統(tǒng)、計算機應用。
友好熟悉的界面逐漸擴大著自己在嵌入式操作系統(tǒng)市場的份額。Windowsmobile平臺是微軟公司針對嵌入式環(huán)境下開發(fā)的一套嵌入式操作系統(tǒng),其主要 是指Windows CE.NET,Windows CE.NET的最新版本為Windows CE 5.0,其中包括3個版本:以數(shù)據(jù)為中心的掌上電腦 Pocket PC;以語音為中心的智能手機Smart Phone;以娛樂為中心的便攜式媒體中心Portable Media Centers。而在 這3個版本中都可能涉及到藍牙應用的開發(fā)。
在Windows CE.NET的開發(fā)上,目前采用微軟公司2005年年底推出的Visual Studio 2005是最理想的選擇。用 Visual Studio 2005可以進行利用C#,或VB.NET等語言開發(fā)基于.NET Compact Framework 2.0或1.0的 托管碼WinCE程序,也可以利用C++語言來開發(fā)基于MFC,ATL或Win32API的本機碼WinCE程序。
因為在微軟最新的.NET Compact Framework 2.0的類庫中還未包含針對藍牙通訊模塊的類庫,而且目前關于在Windows CE中開發(fā)藍牙通訊模塊應用程序的介紹還很少,同時開發(fā)藍牙通訊技術的應用需要十分廣泛,所以本文將就此進行一些討論。
1 基于托管碼開發(fā)藍牙通訊模塊
基于托管碼的開發(fā)就是使用一套運行時環(huán)境(run-time environment)的應用程序接口來開發(fā)。
一般情況下,托管碼應用程序的開發(fā)會比較簡單和快速,并且可跨軟件平臺和處理器來運行,所以開發(fā)出的托管碼也能重新使用并有較高的可移植性。
另外,內(nèi)存管理、資源管理、資源收集、安全性管理等瑣碎工作都由運行時環(huán)境來處理。應用程序開發(fā)工程師不必費心處理。托管應用程序在目標機器上運行,是通過目標機器端的實時編譯器來實時把托管碼編譯成目標機器碼后在目標機器上執(zhí)行。
由于在.NET平臺下,采用CLR(公共語言運行時)可以用不同的語言來調(diào)用.NET Compact Framework來開發(fā)相同功能的應用程序,所以本文托管碼部分僅采用C#語言為例來介紹藍牙通訊模塊開發(fā)。
1.1 利用P/Invoke方法編寫藍牙通訊模塊
藍牙通訊模塊是一個涉及到驅(qū)動硬件的應用程序開發(fā),而.NET Compact Framework并不是一個對Win32API進行了完整封裝的類庫。 所以在基于托管碼開發(fā)藍牙通訊模塊中必須利用到托管代碼如何與非托管代碼交互技術。P/Invoke全稱為Platform Invoke,是.NET開 發(fā)平臺下允許托管代碼調(diào)用DLL庫的本地代碼函數(shù)的服務,類似于JA-VA中的GNI的概念。圖1說明了P/Invoke方法的工作原理。首先用相應語言 的編譯器將托管的源代碼編譯成Assembly的形式,其中包括元數(shù)據(jù)和中間語言代碼。而此時P/Invoke的聲明會以元數(shù)據(jù)的形式存在于 Assembly中,當Assembly被CLR調(diào)用的時候,CLR會根據(jù)元數(shù)據(jù)的聲明在對應的DLL函數(shù)中查找DLL的實現(xiàn)。如果找到,就將其加載到內(nèi) 存中,并定位此DLL函數(shù)的人口點。將托管的參數(shù)人棧,并將函數(shù)的人口點指向?qū)膎ative dll,從而完成了托管代碼調(diào)用非托管代碼的DLL。