Windows CE下串行通信的实现
通常,配置超时值和配置串口类似。首先用GetCommTimeouts函数获得当前串口的超时值。然后可以修改COMMTIMEOUT成员,最后用SetCommTimeouts函数设定超时值。
COMMTIMEOUTS CommTimeouts; //定义COMMTIMEOUTS结构
GetCommTimeouts(hPort,&CommTimeouts); //获得当前的超时值
//修改COMMTIMEOUT成员
CommTimeouts.ReadIntervalTimeout=MAXDWORD;
CommTi
meouts.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是一个完全的多任务、多线程的操作系统。Windows CE同时最多可以运行32个进程。每个进程有一个主线程,而且可以有多个附加线程。附加线程的多少仅受可用内存和线程堆栈的进程地址空间的限制。
Windows CE是以抢先方式调度线程的。线程以时间片为单位来运行,通常是25m
《Windows CE下串行通信的实现(第2页)》