




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于Windows CE.NET实现蓝牙通讯模块的几种方法摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTAC)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。仿真结果表明,该滤波器带宽的可调范围为126 MHz,阻带抑制率大于35 dB,带内波纹小于05 dB,采用18 V电源,TSMC 018m CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。关键词:Butte0引言 自1998年,世界九大电子产业巨头共同发起蓝牙特殊利益集团SIG后,在短短不到十年之内,蓝牙技术已
2、经被应用到如信息家电、电子商务、汽车、航空、医 疗、交通等多个领域。在移动计算方面,蓝牙技术采用了一种极为经济的形式解决了无线通讯“最后10m”的问题,从而替代了各种移动信息电子设备之间的电 缆。因此,蓝牙技术在移动计算领域的应用将十分广阔,它的应用开发也就有很大的实际意义。 微软公司从1996年起开发了嵌入式操作系统WindowsCE1.0开始,凭借着其在PC市场上的成功经验和WindowsCE类似于PC机上操作系统的作者简介:白炜(1980-),男,硕士研究生,研究方向为嵌入式系统。导师简介:白万民,教授,研究方向为嵌入式系统、计算机应用。 友好熟悉的界面逐渐扩大着自己在嵌入式操作系统市场
3、的份额。Windowsmobile平台是微软公司针对嵌入式环境下开发的一套嵌入式操作系统,其主要 是指WindowsCENET,WindowsCENET的最新版本为WindowsCE5.0,其中包括3个版本:以数据为中心的掌上电脑 PocketPC;以语音为中心的智能手机SmartPhone;以娱乐为中心的便携式媒体中心PortableMediaCenters。而在 这3个版本中都可能涉及到蓝牙应用的开发。 在WindowsCENET的开发上,目前采用微软公司2005年年底推出的VisualStudio2005是最理想的选择。用 VisualStudio2005可以进行利用C#,或VBNET等
4、语言开发基于NETCompactFramework2.0或1.0的 托管码WinCE程序,也可以利用C+语言来开发基于MFC,ATL或Win32API的本机码WinCE程序。 因为在微软最新的NETCompactFramework2.0的类库中还未包含针对蓝牙通讯模块的类库,而且目前关于在WindowsCE中开发蓝牙通讯模块应用程序的介绍还很少,同时开发蓝牙通讯技术的应用需要十分广泛,所以本文将就此进行一些讨论。1基于托管码开发蓝牙通讯模块 基于托管码的开发就是使用一套运行时环境(run-timeenvironment)的应用程序接口来开发。一般情况下,托管码应用程序的开发会比较简单和快速,并
5、且可跨软件平台和处理器来运行,所以开发出的托管码也能重新使用并有较高的可移植性。另外,内存管理、资源管理、资源收集、安全性管理等琐碎工作都由运行时环境来处理。应用程序开发工程师不必费心处理。托管应用程序在目标机器上运行,是通过目标机器端的实时编译器来实时把托管码编译成目标机器码后在目标机器上执行。由于在.NET平台下,采用CLR(公共语言运行时)可以用不同的语言来调用NETCompactFramework来开发相同功能的应用程序,所以本文托管码部分仅采用C#语言为例来介绍蓝牙通讯模块开发。11利用PInvoke方法编写蓝牙通讯模块 蓝牙通讯模块是一个涉及到驱动硬件的应用程序开发,而NETCom
6、pactFramework并不是一个对Win32API进行了完整封装的类库。 所以在基于托管码开发蓝牙通讯模块中必须利用到托管代码如何与非托管代码交互技术。PInvoke全称为PlatformInvoke,是NET开 发平台下允许托管代码调用DLL库的本地代码函数的服务,类似于JA-VA中的GNI的概念。图1说明了PInvoke方法的工作原理。首先用相应语言 的编译器将托管的源代码编译成Assembly的形式,其中包括元数据和中间语言代码。而此时PInvoke的声明会以元数据的形式存在于 Assembly中,当Assembly被CLR调用的时候,CLR会根据元数据的声明在对应的DLL函数中查找
7、DLL的实现。如果找到,就将其加载到内 存中,并定位此DLL函数的人口点。将托管的参数人栈,并将函数的人口点指向对应的nativedll,从而完成了托管代码调用非托管代码的DLL。利用PInvoke方法编写蓝牙通讯模块,DllI-port属性非常有用。下面的代码将用例子说明此通用方案,例中托管程序将调用MessageBox(位于User32lib中):usingusingnamespaceSystem:Runtime:InteropSer-vices;namespaceSysWin32DllImport(user32.dll,EntryPoint=MessageBox,CharSet=Unic
8、ode)intMessageBox(voidhWnd,wchar_tlpText,wchar_tlpCaption,unsignedintuType);intmain()SysWin32:MessageBox(0,LHelloworld!,LGreetings,0)注意包含DllImport的代码行。此代码行根据参数值通知编译器,使之声明位于User32dll中的函数,并将签名中出现的所有字符串(如参数或 返回值)视为Unicode字符串。如果缺少EntryPoint参数,则默认值为函数名。另外,由于CharSet参数指定Unicode,因此公共语 言运行库将首先查找称为MessageBoxW
9、的函数。如果运行库未找到此函数,它将根据调用约定查找MessageBox以及相应的修饰名。当调用用户定义的DLL中所包含的函数时,有必要将externC添加在DLL函数声明之前,如下所示:externCSAMPLEDLL_APIintfnSam-pleDLL(void);在调用非本机码时,需要注意的是要将非结构化参数由托管封送处理为本机码形式。可以利用CharSet参数值的作用,将参数中字符串(string类 型)都自动转换为wchar_t。同样,所有Int32参数类型转换为非托管int,UInt32参数类型转换为非托管unsignedint,而 Intl6参数类型转换为了shortint。c
10、har用于in参数的为String(CharSetAnsi),用于out参数或返回 值的为Text:StringBuilder。wchar-t用于in参数为String(CharSetUnicode),用于 out参数或返回值的为Text:StringBuilder。需要注意的是函数指针必须具有_stdcall调用约定,这是因为这是 DllImport支持的唯一类型。对于数组来说数组(如wchar_t),CharSet参数仅应用于函数参数的根类型。因此,无论 CharSet的值是什么,String_gc将被封送处理为wchar_t。除简单类型外,运行库还提供了一种机制,可以将简单结构 由托管上
11、下文封送处理为非托管上下文。简单结构不包含任何内部数据成员指针、结构化类型的成员或其他元素。在做一个关于蓝牙通讯程序前,还需要一些关于蓝牙的基础知识。一个蓝牙模块程序需要包含开启蓝牙,配对,连接,建立串行通道,然后开启通讯过程,还需要在 应用程序中设置串行端口。因为蓝牙技术有安全方面的设置,所以需要对蓝牙设备进行配对。蓝牙的工作状态总共有3种,分别为开启、关闭、可发现。并且所有的 通讯设备都必须有一个对应的DeviceID,蓝牙也不例外,蓝牙的DeviceID是一串以“:”分隔的16进制的数字。有了上述知识,就可以在托管码中利用PInvoke方法开始编写蓝牙通讯模块了。对应的每一步需要调用的基
12、本函数如下:获取本地设备的IDDllImport(Btdrt.dll,SetLastError=true)publicstaticexternintBthReadLocalAddr(bytePBa)获取远程设备的IDDllImport(ws2.dll,EntryPoint=WSALook-upServiceBegin,SetLastError=true)publicstaticexternintCeLookupServiceBegin(bytepQuerySet,LookupFlagsdwFlags,refintlphLookup)监听服务DllImport(ws2.dll,EntryPoin
13、t=WSASetSer-vice,SetLastError=true)publicstaticexternintCeSetService(bytepQuerySet,RNRSERVICE_REGISTER,LookupFlagsdwFlags)连接DllImport(mscoree,EntryPoint=339)publicstaticexternintconnect(ints,bytename,intnamelen)蓝牙的安全设置获取配对码请求DllImport(Btdrt.dll,SetLastError=true)publicstaticexternintBthGetPINRequest
14、(bytepba)设置配对码DllImport(btdrt.dll,SetLastError=true)publicstaticexternintBthSetPIN(bytepba,intcPinLength,byteppin)创建ACL连接:DllImport(Btdrt.dll,SetLastError=true)publicstaticexternintBthCreateACLConnection(bytepbt,refushortphandle);然后是配对码验证:DllImport(Btdrt.dll,SetLastError=true)publicstaticexternintBt
15、hAuthenticate(bytepbt);然后一定要关闭连接:DllImport(Btdrt.dll,SetLastError=true)publicstaticexternintBthCloseConnection(ushorthandle);设置蓝牙无线电状态DllImport(BthUtil.dll,SetLastError=true)publicstaticexternintBthSetMode(RadioModedwMode)在建立好蓝牙设备的连接后,就可以进行两个蓝牙设备之间的通讯了。由于可以将蓝牙通信当作一个虚拟的串行通信来处理,所以在建立通讯的过程中可以采用类似于串口之间的
16、通讯方式。而关于串口通讯这方面资料很多,本文就不具体详述了。12利用微软蓝牙嵌入式工具包编写蓝牙通讯模块微软蓝牙嵌入式工具包是微软公司新推出来基于NETCompactFramework20的一款专门用来快速开发蓝牙应用程序的工具包,直接 在NET平台下直接调用其中类库,可以快速,简单的开发一般的蓝牙应用程序。不过该工具包只能在WindowsCE50下使用。利用工具包可以完 成:启动一个蓝牙服务,寻找周边蓝牙设备,连接已存在的蓝牙设备或者服务。工具包可以在微软网站下载。利用此工具做两个蓝牙设备间进行简单文本传输的程序部分代码如下:Server端:GuidserviceGuid=newGuid(8
17、1553B2B-FFOB-4415-86C9-22B799058B81);ServerHandlesh=btseore.CreateService(ser-viceGuid);NetworkStreamns=sh.AceeptConnection()StingdataToSend=Hello;BytedataBuffer=System.Text.ASCIIEncoding.ASCII.GetBytes(dataToSend);ns.Write(dataBuffer,0,dataBuffer.Length);ns.Flush();ns.Close();Client端:PairedDevices=
18、btsCore.GetPairedDevices();Foreach(BluetoothDevicedeviceinpairedDevices)pairedDevicesListBox.Item.Add(device.deviceName);GuidserviceGuid=newGuid(01550D2D-FF0D-4415-86C9-22B799058B81);If(pairedDevicesListBox.SelectedIndex=0);BluetoothDevicedeviceToConnect=(BluetoothDevice)pairedDevicespairedDevicesLi
19、stBox.Selected;NetworkStreamns=btsCore.Connect(deviceTo-Connect,serviceGuid);bytebuffer=newbyte2000ns.Read(buffer,0,50);charbufferAsChars=System.Text.ASCII.GetChars(buffer)System.Strings=System.Text.Encoding.ASCIIGetString(buffer,0,buffer,length);Message.Show(s)ns.Close();13利用OpenNETCF编写蓝牙通讯模块OpenNE
20、TCF是一个可以有效提高WindowsMobile开发效率的第三方开源类库。是一帮WindowsMobile爱好者共同编写的,里 面提供了很多在NETCompactFramework20中未能包含的类库。有两种方式可以来使用它:一种是可以将其当作一个组件安装在 VisualStudio2005中;另一种是可以将其原代码编辑拿来使用。在OpenNETCF开源类库中就包括有蓝牙方面的,所以也可以利用 OpenNETCF来编写蓝牙通讯模块。对应类库可在WWWopennetcfcom网站下载。在类库中,可以利用命名空间 OpenNETCFIOPorts下的Blue-toothSerialPort来建立
21、蓝牙连接,利用命名空间 OpenNETCFIOSerial中内容进行蓝牙程序的通讯。2基于本机码开发蓝牙通讯模块本机码应用程序是使用一套特定软件平台的应用程序开发接口来开发,并且被编译成一个特定处理器的目的码或机器码。一般情况下,本机码提供较高的效能和最小 的资源要求,但是被编译好的本机码或是可执行文件却只能在此软件平台或特定处理器上运行。此外,本机码应用程序常需要应用开发者自行处理类似内存管理、资 源管理、安全性管理等。在VisualStudio2005中已经可以利用C+语言来开发基于MFC,ATL或Win32API的本机码WinCE 程序。这就提供了类似于用eMbeddedVisualC+来开发windowsmobile设备的方法。而本文在利用PInvoke方法编写 蓝牙通讯模块时介绍的就是调用本机码开发蓝牙应用程序,方法类似,所以此处就不再进行具体的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衣物捐赠及转让协议
- 纺织品的智能生产调度优化考核试卷
- 购房定金的法律咨询服务协议
- 电影叙事技巧与剧情发展考核试卷
- 中班礼仪:尊敬长辈
- 肿瘤内科常见急症及护理
- 石棉制品生产过程中的节能减排考核试卷
- 服装零售企业危机应对与舆情管理考核试卷
- 电视机制造业的数字化供应链管理考核试卷
- 畜牧业信息技术在养殖中的应用考核试卷
- 《大学生创新创业基础教程》第六章创业资源与融资
- 山水林田湖草生态环境调查技术规范DB41-T 1992-2020
- 大众旅游服务质量控制手册
- GB/T 44421-2024矫形器配置服务规范
- 大型活动策划与管理第八章 大型活动风险管理
- Q∕GDW 12165-2021 高海拔地区运维检修装备配置规范
- JGJ107-2016钢筋机械连接技术规程
- 妇科医生进修汇报课件
- 动态分析与设计实验报告总结
- 2024年江苏省泰州市海陵区中考一模数学试卷
- 从汽车检测看低空飞行器检测发展趋势
评论
0/150
提交评论