Данные в реальном времени с необработанным сокетом rnet - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь передать необработанные rnet пакеты с машины linux на микроконтроллер. Я должен использовать необработанные пакеты, потому что микро отправляет необработанные кадры, и у него нет стека tcp / ip.

fd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW);
sendto(fd, sendbuf, 64, 0, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll))

Хотя я могу правильно передавать и принимать все кадры, я не могу сделать это в режиме реального времени. Например, у меня на компьютере linux есть пакет, который следует отправлять каждые 20 мс. Я наблюдаю, что хотя я передаю пакет в среднем 20 мс, я не вижу его каждые 20 мс. Я думаю, это потому, что процессор пытается буферизировать несколько сообщений перед отправкой. Я изменил буферы так -

int buff = 1;

(setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &buff, sizeof(int))

и до сих пор не вижу никакого эффекта. Есть ли способ вывести sh из буфера передачи необработанного сокета, как только в нем появится информация, вместо того, чтобы ждать, пока несколько сообщений будут в буфере? Или мое понимание задержки неверно?

...