加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 最小延迟的串行通信

发布时间:2020-12-14 05:42:10 所属栏目:Windows 来源:网络整理
导读:我有一台通过串行通讯与外部设备连接的计算机(即物理或仿真串口的RS-232 / RS-422).它们通过频繁的数据交换(30Hz)相互通信,但只有很小的数据包(每个数据包少于16个字节). 通信的最关键要求是低延迟或发送和接收之间的延迟. 数据交换模式是握手式的.一个主机
我有一台通过串行通讯与外部设备连接的计算机(即物理或仿真串口的RS-232 / RS-422).它们通过频繁的数据交换(30Hz)相互通信,但只有很小的数据包(每个数据包少于16个字节).

通信的最关键要求是低延迟或发送和接收之间的延迟.

数据交换模式是握手式的.一个主机设备启动通信并在客户端设备上继续发送通知.客户端设备需要尽快回复来自主机设备的每个通知(这正是需要实现低延迟的地方).通知和回复的数据包定义明确;即数据长度是已知的.
基本上不允许数据丢失.

我使用以下常见的Win API函数以同步方式进行I / O读/写:
CreateFile,ReadFile,WriteFile

客户端设备使用ReadFile从主机设备读取数据.一旦客户端读取长度已知的完整数据包,它就使用WriteFile以相应的数据包回复主机设备.读取和写入始终是顺序的,没有并发性.

不知何故,沟通不够快.即数据发送和接收之间的持续时间过长.我想这可能是串口缓冲或中断的问题.

在这里,我总结了一些可能的措施,以改善延迟.
请给我一些建议和更正:)

>使用FILE_FLAG_NO_BUFFERING标志调用CreateFile?我不确定这个标志在这种情况下是否相关.
>在每个WriteFile之后调用FlushFileBuffers?或任何可以通知/中断串口以立即传输数据的动作?
>为处理串行通信的线程和进程设置更高的优先级
>为模拟设备设置延迟计时器或传输大小(使用其驱动程序).但物理串口怎么样?
> Linux上的任何等效内容如Linux下的setserial / low_latency?
>禁用FIFO?

提前致谢!

解决方法

我遇到过类似的串口问题.
在我的情况下,我解决了减少串行端口延迟的问题.
您可以使用控制面板更改每个端口的延迟(默认情况下设置为16毫秒).
你可以在这里找到方法:
http://www.chipkin.com/reducing-latency-on-com-ports/

祝好运!!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读