<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > 基于Windows CE.NET實(shí)現(xiàn)藍(lán)牙通訊模塊的幾種方法

          基于Windows CE.NET實(shí)現(xiàn)藍(lán)牙通訊模塊的幾種方法

          作者: 時(shí)間:2010-11-29 來(lái)源:網(wǎng)絡(luò) 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/156912.htm

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          c++相關(guān)文章:c++教程



          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: 藍(lán)牙 嵌入式

          評(píng)論


          相關(guān)推薦

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

          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();