gpt4 book ai didi

c - 串行编程 : measuring time between characters

转载 作者:行者123 更新时间:2023-12-04 11:02:04 25 4
gpt4 key购买 nike

我正在 Linux 中通过串行线路发送/接收数据,我想找到字符之间的延迟。

Modbus 使用 3.5 个字符的延迟来检测消息帧边界。如果超过 1.5 个字符的延迟,则消息帧被声明为不完整的。

我正在用 C 编写一个快速程序,它基本上是

fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
// setup newtio
....
tcsetattr(fd, TCSANOW, &newtio);
for(;;) {
res = read(fs, buf, 1);
if (res > 0) {
// store time in milliseconds?
//do stuff
}
}

有什么方法可以测量这里的时间吗?或者我是否需要以不同的方式查看从串行线路中检索数据?

我还尝试连接到 SIGIO 以在有数据时获取信号,但我似乎一次获取 8 个字节的数据。

(是的,我知道存在一些 modbus 库,但我想在其他应用程序中使用它)

最佳答案

简单的答案是... 你不能 (并非没有编写您自己的串行驱动程序)!

如果您正在编写 MODBUS 主站,则有一些希望:您可以通过等待任何时间(提供超过 3.5 个字符)而不接收任何内容来检测从站响应的结束(select(2) 可以在这里帮助您),或者通过在阅读时即时解析响应(第二种方法浪费的时间少得多)。在收到对前一个请求的响应后,您还必须小心等待至少 3.5 个字符时间,然后才能开始传输新请求。 “至少”在这里有效!多等也无所谓。等待少了。

如果您正在编写 MODBUS 从站,那么您就是 运气不好 .您只需不能 从用户空间 Linux 可靠地做到这一点。您必须编写自己的串行驱动程序。

顺便说一句,这不是 Linux 的错。这是由于 MODBUS 的成帧方法难以置信的愚蠢。

关于c - 串行编程 : measuring time between characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1739826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com