首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
WindowsCE下串行通信的实现 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 22:47:12 点击数:[] ![]() |
|||||
[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.com将为您整理更多优秀的免费论文,谢谢您的支持] 关键词:Windows CE 串行通信 GPS 1 Windows CE简介 Windows CE是一种小型的、基于ROM的、具有Win32子集API的操作系统。它的优势在于小尺寸、Win32 API子集和对多平台的支持能力。在Windows CE下编程需要注意的是,Windows CE设备的资源很少,存储器、显示器都很小,接口也比较少,而且根据实际情况变化很大。另外,Windows CE只支持Unicode,这在编程中要格外注意。在Windows CE中,除了一些基本的Windows通用控件以外,还有一些专门设计的控件,比如CommandBar。Windows CE体积虽小,但是它的功能并不少,内存管理、文件操作、多线程、网络功能等等它都支持,可以说是麻雀虽小,五脏俱全。 2 Windows CE下的串行通信 串行端口在Windows CE下属于流接口设备,它是串行设备接口的常规I/O驱动程序调用和与通信相关的具体函数的结合。串行设备被视为用于打开、关闭、读写串行端口的常规、可安装的流设备。Windows CE的通信函数和其它大多数Windows的通信函数相同。特别要注意的是,Windows CE不支持直接对串行端口的寄存器进行编程。常用的串行端口函数介绍如下: (1)打开和关闭串行端口 CreateFile函数用于打开串行口。 hPort=CreateFile(TEXT(“COM1:”),GENERIC_READGENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL)。注意COM1后要有一个冒号。最后一个参数dwFlagsAndAttributes必须为0,因为Windows CE只支持非重叠I/O。第3个参数dwShareMode也必须为0,通信端口不能像文件一样被共享。这个函数的返回值是已打开的串行端口的句柄或者是INVALID_HANDLE_VALUE。 关闭串行口可以调用CloseHandle(hPort)。 (2)配置串行端口 配置串行口主要是用DCB结构配置端口设置,包括波特率、停止位、数据位长度、校验位、流量控制等等,还有配置超时值。 首先打开串行端口,用GetCommState函数获得当前打开串口配置,然后根据需要修改DCB成员,最后用SetCommState函数设置新的串口配置。 DCB PortDCB; //创建DCB变量 Port.DCB.DCBlength=sizeof(DCB); GetCommState(hPort,&PortDCB); //获取当前串口配置修改DCB成员 PortDCB.BaudRate=9600; //波特率 PortDCB.Parity=NOPARITY; //校验位 PortDCB.StopBits=ONESTOPBIT; //停止位 PortDCB.ByteSize=8; . . . SetCommState(hPort,&PortDCB); //设置新的串口配置 对串行端口来说,必须配置超时值,否则程序可能陷入到一个循环来等待来自串口的字符。这对采用Windows CE的设备来说,将大大减少设备电池的使用时间,所以超时值是需要配置的。另外一种解决办法就是采用多线程。多线程将在下一部分讲述。 通常,配置超时值和配置串口类似。首先用GetCommTimeouts函数获得当前串口的超时值。然后可以修改COMMTIMEOUT成员,最后用SetCommTimeouts函数设定超时值。 COMMTIMEOUTS CommTimeouts; //定义COMMTIMEOUTS结构 GetCommTimeouts(hPort,&CommTimeouts); //获得当前的超时值 //修改COMMTIMEOUT成员 CommTimeouts.ReadIntervalTimeout=MAXDWORD; CommTimeouts.ReadTotalTimeoutMultiplier=0; CommTimeouts.ReadTotalTimeoutConstant=0; CommTimeouts.WriteTotalTimeoutConstant=1000; CommTimeouts.WriteTotalTimeoutMultiplier=10; SetCommTimeouts(hPort,&CommTimeouts); //设定超时值 (3)读写串行端口 用ReadFile和WriteFile函数读写串行口。 int rc; DWORD cBytes; BYTE ch; Rc=ReadFile(hPort,&ch,1,&cBytes,NULL); 其中第一个参数是串口句柄,第2个参数是读回的字符,第3个参数是要读取的字符数量,第4个参数返回实际读取到的字符数量。 Int rc; DWORD cBytes; BYTE ch=TEXT(“a”); Rc=WriteFile(hPort,&ch,1,&cBytes,NULL); 其中第一个参数是串口句柄,第2个参数是要写入的字符,第3个参数是要写入的字符数量,第4个参数返回字符写入的字符数量。 需要注意的是Windows CE不支持重叠I/O,所以如果在主线程进行大量读写串口操作时,有可能使整个程序陷入缓慢的串口等待中去,因此一般都采用多线程来进行读写串口操作。 (4)通信事件 在Windows CE编程中,除了可以采用单独的线程来处理读写串口操作外,还可以采用利用通信事件的方法。通信事件就是当发生重要事件时,Windows CE向应用程序发送的通知。利用WaitCommEvent函数阻塞线程,直到特定的事件发生。一般的使用方法是:先用SetCommEvent函数指定要查找的一个或多个事件,然后,调用WaitCommEvent函数,并指定导致这个函数返回的事件。当WaitCommEvent函数返回后,循环调用ReadFile函数,读回所有接收到的字符。最后再次调用SetCommEvent函数,指定下次要查找的事件。 3 Windows CE下的多线程 Windows CE是一个完全的多任务、多线程的操作系 Tags: |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |