LINUX.ORG.RU

как пробудить select запущенный с тайм-аутом ~1ms ранше чем через 10мс?


0

0

вобщем есть железка подключенная через СОМ - порт с временем реакции ~1ms. Я хочу заслать в неё три команды за такт шедуллера но при попытке дождатся ответа на первую команду select засыпает до начала следующего такта. а я бы хотел чтобы процес не терял ~70% своего времени.

есть варианты кроме смены шедуллера?

★★★★★

У вас com-port со скоросью 1MBit? ИМХО, правильнее всего решать такие задачи железно, то есть FPGA + буфер, либо если скорость не так важна, то обычный микроконтроллер + буфер. А надеятся на шедулер, ни разу не правильно.

krum
()

Извините, может я неправильно понял, но ведь в селект передается указатель на структуру,где можно указать таймаут с точностью до 1 мкс!

anonymous
()

А если попробовать отдельный поток, работающий без select() и дать ему SCHED_FIFO policy (sched_setscheduler())?

>У вас com-port со скоросью 1MBit?

10 кБит/сек == 1 байт за 1 мс. 1000 мс = 1 с

mky ★★★★★
()
Ответ на: комментарий от krum

У меня очень короткие пакеты, ~5 байт на 57600 кбит/с

cvv ★★★★★
() автор топика
Ответ на: комментарий от krum

вопрос не в точности а втом что процесс не может выработать свой тайм-слот, или как его там, зовут на своё усмотрение

cvv ★★★★★
() автор топика

Вариант раз - использовать хард РТ патч типа RTAI или RtLinux

Вариант два - использовать готовые драйвера для работы с СОМ портом - www.lirc.org - они там получали задержку около одной милисекунды без всяких РТ патчей.

P.S. - с софт-РТ (см. ссылку выше) патчем получал задержку около одной мс (нить с SCHED_FIFO и не маленьким приоритетом), но протц грузился тоже не слабо. В общем модули ядра рулят.

marsijanin ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.