- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows串口编程技术.ppt
串行通信超时(Time-Outs)处理 串行通信超时(Time-Outs)处理: COMMTIMEOUTS结构用来设置串口超时参数,当应用程序打开一个串口设备时,系统设置设备的超时参数为设备最后一次使用时的数值,如果设备未被打开过,则使用缺省值。合理的做法是:每次打开设备都应该调用SetCommTimeouts函数对超时参数进行设置,查看当前超时参数设置,调用GetCommTimeouts函数。 串行通信超时(Time-Outs)处理 Windows环境下的串行通信支持两种超时处理:Interval time-outs 和 Total time-outs。 Interval time-outs 我们可以称之为字符间隔超时,当接收两个字符的间隔时间超过指定的毫秒数时,超时发生。Interval time-outs每当收到一个字符时开始计时。 Total time-outs 我们可以称之为操作总超时,当一个读写操作消耗的时间超过指定的毫秒数时,超时发生。Total time-outs当一个读写操作开始时开始计时。 写操作仅支持操作总超时,读操作支持两种超时处理。 串行通信超时(Time-Outs)处理 操作总超时(Total time-outs)的值由COMMTIMEOUTS结构中的超时乘法因子和超时常量确定,使用如下公式: Timeout = (MULTIPLIER * number_of_bytes) + CONSTANT 使用超时因子和超时常量可以使操作超时时间根据读取的数据量变化,这两个值也可以设置为0而只使用其中一个,如果两个都为0,则表示不使用操作总超时处理。 如果所有读操作超时参数都为0,则不使用读操作超时,这种情况下,对于一个读操作,直到请求字节数的数据全部被读出或者某种错误发生,操作才会返回。写操作的情况类似。 串行通信超时(Time-Outs)处理 如果读操作的字符间隔超时参数设置为MAXDWORD (0xffffffff,等价于INFINITE),而操作总超时参数超时乘法因子和超时常量值均设为0,那么一个读操作将在读取了输入缓存中的任何字符后立即返回,即使缓存为空。 字符间隔超时当一个读操作过程中数据传输出现停顿时使操作返回。使用字符间隔超时并设置一个合适的超时时间,可以对少量字符传送的情况作出迅速反应,也可以使用一个读操作在一个稳定数据流的情况下接收一批数据。 串行通信超时(Time-Outs)处理 如果应用程序设置字符间隔超时和操作总超时的乘法因子均为MAX_WORD,而将操作总超时的超时常量设为大于0小于MAX_WORD的一个值,那么在调用ReadFile时,以下三种情况可能发生: 如果输入缓冲区中有字符,ReadFile读取缓冲区中的字符并立即返回。 如果输入缓冲区中没有字符,在超时常量指定的时间内,ReadFile等候直到有一个字符到达后立即返回。 如果输入缓冲区中没有字符,并且在超时常量指定的时间内没有收到任何字符,ReadFile超时。 Windows串口通信实现方式 在实现通用串口类之前,我们先介绍实现串口通信的方式。 讨论:有些资料中把串口的通信方式分为以下四种: 同步通信方式 查询(轮询)方式 异步通信方式 事件驱动方式 这样的划分其实并不合理,因为同步或异步指的是读写操作的不同机制,而轮询或事件驱动,指的是判断应该何时去读写设备的方式。对于轮询或事件驱动方式中对设备的读写,既可以使用同步方式,也可以使用异步方式。 Windows串口通信实现方式 对于设备IO的同步和异步方式,我们在前面的“Windows设备通信基础”和“Windows异步IO技术”中已经做了详细的介绍,这里不再做过多的讨论。下面介绍轮询和事件驱动方式。 轮询:轮询是设备驱动程序处理IO常见的方式,即驱动程序按照一定的时间间隔检查是否有数据输入。对于串口通信,上层应用程序也可以使用轮询的方式,即按照一定的超时设置定时检查串口设备的输入缓冲区是否有数据进入。 Windows串口通信实现方式 事件驱动方式:应用程序可以通过SetCommMask函数设定所关心的串口事件,并调用WaitCommEvent进行等待,当设定的关心事件发生时,WaitCommEvent等待将满足,并通过该函数的lpEvtMask参数报告发生事件的类型。对于可监视事件的类型,参看前面对WaitCommEvent函数的详细说明。 WaitCommEvent可以使用同步或异步方式。 如果在WaitCommEvent函数未返回之前调用SetCommMask函数,WaitCommEvent函数将返回错误。 Windows串口通信实现方式 WaitCommEvent对在最后一次调用WaitCommEvent或SetCommMask
文档评论(0)