我试图在我的Beaglebone Black板上制作一个EtherCAT主机,我用Xenomai 3.3将内核映像替换为v4.18。
我有一个小小的演示来描述基本机制。为了简化我的问题,我删除了一些无用的代码。
int socketfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW);
sigemptyset(&sigset);
sigaddset(&sigset, SIGALRM);
pthread_sigmask(SIG_BLOCK, &sigset, NULL);
timer_create(CLOCK_MONOTONIC, NULL, &timer);
timer_settime(timer, 0, &interval, NULL);
while(1)
{
sigwaitinfo(&sigset, &siginfo);
sendto(socketfd, data, len, 0, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll));
}
当代码开始运行时,另一台PC通过Wireshark捕获包。
在Wireshark的监视器上: Wireshark Image
当我将间隔时间设置为500us时,您可以看到一些包可以及时到达,但有些包可以同时发送。
如果我将间隔更改为100us,可能是树或四个包被集中。
只有将间隔设置为1ms以上时,包才会停止结块。
您有什么想法来解决这个问题吗?或者我只能在1ms以上的时间内运行此代码?