欢迎来到人人文库网! | 帮助中心 人人文档renrendoc.com美如初恋!
人人文库网
全部分类
  • 图纸下载>
  • 教育资料>
  • 专业文献>
  • 应用文书>
  • 行业资料>
  • 生活休闲>
  • 办公材料>
  • 毕业设计>
  • ImageVerifierCode 换一换
    首页 人人文库网 > 资源分类 > DOC文档下载  

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

    • 资源ID:101418       资源大小:77KB        全文页数:6页
    • 资源格式: DOC        下载积分:5积分
    扫码快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
    二维码
    微信扫一扫登录

    手机扫码下载

    请使用微信 或支付宝 扫码支付

    • 扫码支付后即可登录下载文档,同时代表您同意《人人文库网用户协议》

    • 扫码过程中请勿刷新、关闭本页面,否则会导致文档资源下载失败

    • 支付成功后,可再次使用当前微信或支付宝扫码免费下载本资源,无需再次付费

    账号:
    密码:
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源(1积分=1元)下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    第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:等待的对象是互斥对象,并反拥有该对象的线程在终止时候没有释放该对象。WAIT_OBJECT_0:指定的对象处于有信号状态。WAIT_TIMEOUT:超时事件发生后,指定的对象仍处于无信号状态。如果函数调用成功,则返回值不为0;如果函数调用失败,则返回值为0。如果想获得进一步错误信息,可以调用GetLastError()函数来获取。

    注意事项

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

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    网站客服QQ:2881952447     

    copyright@ 2020-2024  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

    备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!