第5章 串口的读写和缓冲区数据的显示.doc_第1页
第5章 串口的读写和缓冲区数据的显示.doc_第2页
第5章 串口的读写和缓冲区数据的显示.doc_第3页
第5章 串口的读写和缓冲区数据的显示.doc_第4页
第5章 串口的读写和缓冲区数据的显示.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章串口的读写和缓冲区数据的显示33第5章串口的读写和缓冲区数据的显示利用WIN32API读写串口时,既可以同步执行,也可以重叠(异步)执行。在同步执行时,函数直接操作完成后才返回。这意味着同步执行时线程会被阻塞,从而导致效率降低,在重叠执行时,即使操作未完成,调用的函数也会立即返回。费时的I/O操作在后台进行这样线程就可以做其他工作。例如线程可以在不同的句柄上执行I/O操作,甚至可以在同一句柄上同时进行读写操作。“重叠”一词含义就在于此。5.1读串口操作程序可以使用WIN32APIReadFile()函数从串口读取数据。ReadFile()函数声明如下:BOOLReadFile(HANDLEhFile,/指向标识的句柄LPVOIDlpBuffer,/指向一个缓冲区DWORDnNumberOfBytesToRead,/读取的字节数LPDWORDlpNumberOfBytesRead,/指向调用该函数读出的字节数LPOVERLAPPEDlpOverlapped/一个OVERLAPPED的结构)其中主要参数介绍如下:hFile:指向标识的句柄。对串口来说,就是由CreateFile()函数返回的句柄。该句柄需拥有GENERICREAD的权限。lpBuffer:指向一个缓冲区、该缓冲区主要用于存放从串口设备中读取的数据。nNumberOfBytesToRead:指定要从串口设备读取的字节数lpNumberOfBytesRead:指向调用该函数读出的字节数。ReadFile()在读操作前,首先将其设置为0。WindowsNT/2000中当lpOverlapped没有设置时,lpNumberOfBytesRead必需设置。当lpOverlapped设置时,lpNumberOfBytesRead可以不设置。这是可以调用GetOverlappedResult()函数获取实际的读取数值。Windows9x中这个参数一定要设置.lpOverlapped:是一个0VERLAPPED的结构,如果hFile以燕山大学工学学士学位论文34FILE_FLAG_OVERLAPPED方式常见,则需要此结构;否则,不需要此结构。5.2写串口操作可以使用WIN32API函数WriteFile()向串口中写数据。WriteFile()的数声明如下:BOOLWriteFile(HANDLEhFile,/指向标识的句柄LPVOIDlpBuffer,/指向一个缓冲区DWORDnNumberOfBytesToWrite,/指定要向串口设备写入的z字节数LPDWORDlpNumbersOfBytesWritten,/指向调用该函数已写入的字节数LPOVERLAPPEDllpOverlapped/一个OVERLAPPED的结构);其中主要参数介绍如下:hFile:指向标识的句柄。对串口来说,就是由CreateFile()函数返回的句柄。该句柄需拥有GENERICWRITE的权限。pBuffer:指向一个缓冲区,该缓冲区主要用来存放待写入串口设备的数据。nNumberOfBytesToWrite:指定要向串口设备写入的字节数。lpNumbersOfBytesWritten:指向调用该函数已写入出的字节数。WriteFiIe()在写操作前,首先将其设置为0。WindowsNT2000中当lpOverlapped没有设置时,lpNumbersOfBytesWritten必需设置,当lpOverlapped设置时,lpNumbersOfBytesWritten可以不设置。这时可以调用GetOverlappedResult()函数获取实际读取数值。Windows9x中这个参数一定要设置。lpOverlapped:是一个OVERLAPPED的结构,如果hFile以FILE_FLAS_OVERLAPPED方式常见,则需要此结构;否则,不需要此结构。第5章串口的读写和缓冲区数据的显示355.3异步I/O操作异步(重叠)I/O操作是指应用程序可以在后台读或者写数据而在前台做其他事情。例如,用程序可以在开始时对1000个数据进行读或写操作,然后返回执行其他的操作;在读写完成后,Windows就会产个一个信号,应用程序得到这个信号,便可以进行其他读写操作。要使用OVERLAPPED结构,CreateFile()函数的fdwAttrsAndFlags参数必须设置为FILE_FLAG_OVERLAPPED标识,读写串口函数必须指定OVERLAPPED结构。异步I/O操作在Windows中使用广泛。OVERLAPPED结构类型声明如下:typedefstruct_OVERLAPPEDDWORDInternal;DWORDInternalHigh;DWORDOffset;DWORDOffsetHigh;HANDLEhEvent;OVERLAPPED;其中主要参数如下:Internal:操作系统保留,指出一个和系统相关的状态当GetOverlappedResult()函数返回时,如果将扩展信息设置为ERROR_IO_PENDING,该参数有效。InternalHigh:操作系统保留,指出发送或接收的数据长度。当GetOverlappedResult()函数返回值不为0时,该参牧有效。Offset和OffsetHigh:指明文件传送的开始位置和字节偏移量的高位字。当进行端口操作时,这两个参数被忽略。hEvent:指定一个I/O操作完成后触发的事件(信号)。在调用读写函数进行I/O操作之前,必需设置该参数。异步I/O操作可以由GetOverlappedResult()函数来获取结果,也可以使用Windows信号函数来处理。GetOverlappedResult()函数可声明为:BOOLGetOverlappedResult(HANDLEhFile,LPOVERLAPPPEDlpoverlapped,LPDW0RDlPNumberOfBytesTansferred,燕山大学工学学士学位论文36BOOLbWait);其中主要参数介绍如下:hFile:标识通信句柄,它应该和开始调用重叠结构的ReadFile,WriteFile,WaitCommEvent函数的参数一致。lpoverlapped:在启动异步操作时指定的0VERLAPPED结构。lPNumberOfBytesTansferred:指向一个长整型变量,该变量接收有一个读或写操作实际传递的字节数。bWait:指定函数是否等待挂起的异步操作完成。如果该参数设为1,该函数知道I/O操作完成后才返回。如果该参数被设为0,同时处于披挂起状态,该函数返回为0,且GetLastError()函数返回ERROR_IO_INCOMPLETE。如果该函数调用成功,则返回值不为零,如果函数调用失败,则返回值为零。Windows也使用等待函数来检查事件对象的当前状态或等待Windows状态信号,在WaitForSingleObject()函数中指定的OVERLAPPED结构中的hEvent即可获取函数返回事件。WaitForSingleObject()函数的的声明如下:DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);其中主要参数如下:hHandle:指定一个司步时间的勾柄,这里是指oVERLAPPEd结构中的hEvenl句柄。dwMilliseconds:以ms为单位指定超时时间。该函数如果调用成功,则返回值标识该函数导致该函数返回的事件,否则返回值WAIT_FAILE。成功的返回值可以是以下的三个值之一:WAIT_ABANDONED

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论