会员注册 | 登录 | 微信快捷登录 支付宝快捷登录 QQ登录 微博登录 | 帮助中心 人人文库renrendoc.com美如初恋!
站内搜索 百度文库

热门搜索: 直缝焊接机 矿井提升机 循环球式转向器图纸 机器人手爪发展史 管道机器人dwg 动平衡试验台设计

   首页 人人文库网 > 资源分类 > DOC文档下载

第5章 串口的读写和缓冲区数据的显示.doc

  • 资源星级:
  • 资源大小:77.00KB   全文页数:6页
  • 资源格式: DOC        下载权限:注册会员/VIP会员
您还没有登陆,请先登录。登陆后即可下载此文档。
  合作网站登录: 微信快捷登录 支付宝快捷登录   QQ登录   微博登录
友情提示
2:本站资源不支持迅雷下载,请使用浏览器直接下载(不支持QQ浏览器)
3:本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

第5章 串口的读写和缓冲区数据的显示.doc

第5章串口的读写和缓冲区数据的显示33第5章串口的读写和缓冲区数据的显示利用WIN32API读写串口时,既可以同步执行,也可以重叠(异步)执行。在同步执行时,函数直接操作完成后才返回。这意味着同步执行时线程会被阻塞,从而导致效率降低,在重叠执行时,即使操作未完成,调用的函数也会立即返回。费时的I/O操作在后台进行这样线程就可以做其他工作。例如.线程可以在不同的句柄上执行I/O操作,甚至可以在同一句柄上同时进行读写操作。重叠一词含义就在于此。5.1读串口操作程序可以使用WIN32APIReadFile函数从串口读取数据。ReadFile函数声明如下BOOLReadFileHANDLEhFile,//指向标识的句柄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的数声明如下BOOLWriteFileHANDLEhFile,//指向标识的句柄LPVOIDlpBuffer,//指向一个缓冲区DWORDnNumberOfBytesToWrite,//指定要向串口设备写入的z字节数LPDWORDlpNumbersOfBytesWritten,//指向调用该函数已写入的字节数LPOVERLAPPEDllpOverlapped//一个OVERLAPPED的结构)其中主要参数介绍如下hFile指向标识的句柄。对串口来说,就是由CreateFile函数返回的句柄。该句柄需拥有GENERICWRITE的权限。pBuffer指向一个缓冲区,该缓冲区主要用来存放待写入串口设备的数据。nNumberOfBytesToWrite指定要向串口设备写入的字节数。lpNumbersOfBytesWritten指向调用该函数已写入出的字节数。WriteFiIe在写操作前,首先将其设置为0。WindowsNT/2000中当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_OVERLAPPED{DWORDInternalDWORDInternalHighDWORDOffsetDWORDOffsetHighHANDLEhEvent}OVERLAPPED其中主要参数如下Internal操作系统保留,指出一个和系统相关的状态当GetOverlappedResult函数返回时,如果将扩展信息设置为ERROR_IO_PENDING,该参数有效。InternalHigh操作系统保留,指出发送或接收的数据长度。当GetOverlappedResult函数返回值不为0时,该参牧有效。Offset和OffsetHigh指明文件传送的开始位置和字节偏移量的高位字。当进行端口操作时,这两个参数被忽略。hEvent指定一个I/O操作完成后触发的事件信号。在调用读写函数进行I/O操作之前,必需设置该参数。异步I/O操作可以由GetOverlappedResult函数来获取结果,也可以使用Windows信号函数来处理。GetOverlappedResult函数可声明为BOOLGetOverlappedResultHANDLEhFile,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函数的的声明如下DWORDWaitForSingleObjectHANDLEhHandle,DWORDdwMilliseconds其中主要参数如下hHandle指定一个司步时间的勾柄,这里是指oVERLAPPEd结构中的hEvenl句柄。dwMilliseconds以ms为单位指定超时时间。该函数如果调用成功,则返回值标识该函数导致该函数返回的事件,否则返回值WAIT_FAILE。成功的返回值可以是以下的三个值之一WAIT_ABANDONED等待的对象是互斥对象,并反拥有该对象的线程在终止时候没有释放该对象。WAIT_OBJECT_0指定的对象处于有信号状态。WAIT_TIMEOUT超时事件发生后,指定的对象仍处于无信号状态。如果函数调用成功,则返回值不为0如果函数调用失败,则返回值为0。如果想获得进一步错误信息,可以调用GetLastError函数来获取。

注意事项

本文(第5章 串口的读写和缓冲区数据的显示.doc)为本站会员(网游小王子)主动上传,人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知人人文库网([email protected]),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。

copyright@ 2015-2017 人人文库网网站版权所有
苏ICP备12009002号-5