我正在研究有关网络同步的项目。 由于我想获得最佳性能,因此我尝试将软件时间戳记结果与硬件时间戳记结果进行比较。
我已经关注了这个先前发表过的问题: Linux内核UDP接收时间戳,但是经过几次测试,在尝试获取硬件接收时间戳时遇到了一些问题。
我的场景由两台设备,一台PC和一台Gateworks Ventana板组成,这两个设备都应该等待数据包在其网络中广播并加盖其接收时间,我尝试使用此代码(省略了某些部分):
int rc=1;
int flags;
flags = SOF_TIMESTAMPING_RX_HARDWARE
| SOF_TIMESTAMPING_RAW_HARDWARE;
rc = setsockopt(sock, SOL_SOCKET,SO_TIMESTAMPING, &flags, sizeof(flags));
rc = bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
struct msghdr msg;
struct iovec iov;
char pktbuf[2048];
char ctrl[CMSG_SPACE(sizeof(struct timespec))];
struct cmsghdr *cmsg = (struct cmsghdr *) &ctrl;
msg.msg_control = (char *) ctrl;
msg.msg_controllen = sizeof(ctrl);
msg.msg_name = &serv_addr;
msg.msg_namelen = sizeof(serv_addr);
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
iov.iov_base = pktbuf

本文探讨了一个网络同步项目的实施,作者在比较软件和硬件时间戳时遇到问题。通过在Linux环境下使用sockets,并设置SOF_TIMESTAMPING_RX_HARDWARE和SOF_TIMESTAMPING_RAW_HARDWARE标志,尝试获取硬件接收时间戳,但结果为0。当切换到包含软件时间戳的标志时,收到了有效的时间戳,但这些是软件时间戳。作者寻求获取硬件处理接收到的数据包的时间戳的正确方法。
最低0.47元/天 解锁文章
172万+

被折叠的 条评论
为什么被折叠?



