Windows CE下串行通信的实现
发布时间:2008/5/29 0:00:00 访问次数:378
摘要:windows ce是微软公司推出的一种嵌入式的操作系统、用于系统资源有限的小型设备。它采用模块化的结构,支持多种外部接口,包括最常用的rs232串行接口。本文就windows ce系统串行接口的编程进行讨论,并给出与gps设备的接口程序。
关键词: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;
commti
摘要:windows ce是微软公司推出的一种嵌入式的操作系统、用于系统资源有限的小型设备。它采用模块化的结构,支持多种外部接口,包括最常用的rs232串行接口。本文就windows ce系统串行接口的编程进行讨论,并给出与gps设备的接口程序。
关键词: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;
commti