LINUX.ORG.RU

Система Реального Времени


0

0

Может кто сталкивался, может кто чё посоветует ... Надо использовать Linux в системе реального времени: выполняется процесс, который следит за параметрами и при необходимости в определённый момент реагирует каким-то образом ...

anonymous
Ответ на: комментарий от AVI

Вот оно в чем дело, блин, плохо не быть хоть чуть чуть электрощиком.
Когда я соединяю две винды через эти же самые порты, винда показывает
соединение 4Mегабита. В каком режиме это может быть?
Ни ДМА ни прерывания LPT портом не используются.

anonymous
()

По-моему, винда использует обычный SPP режим, который давно уже стал двунаправленным. В этом режиме все циклы обмена формируются программно через регистры статуса и управления. P.S. Это не точно, может сейчас виндовузы и более продвинутое что-то используют, раньше вроде было так.

AVI
()
Ответ на: комментарий от AVI

AVI, спасибо огромное за ответы. Оказалось, что 3 дня дурью маялся.

anonymous
()

Я другой anonymous :-)
Мне нада собирать данные с частотой 8KГц, с LPT порта, в моем случае
задача сводиться к получению управления раз в 125 милисекунд.
Кто нибуть подобное пробовал?
Почему то малейший sleep(usleep, nanosleep) длится в районе от
12000 до 20000 милисекунд.

1063879565:144495 - 1063879565:157627 13132
1063879565:159348 - 1063879565:177625 18277
1063879565:178887 - 1063879565:198139 19252
1063879565:199436 - 1063879565:217895 18459
1063879565:219599 - 1063879565:237625 18026
1063879565:238906 - 1063879565:257667 18761
1063879565:258956 - 1063879565:277627 18671
1063879565:278888 - 1063879565:297625 18737
1063879565:298887 - 1063879565:317626 18739
1063879565:318886 - 1063879565:337626 18740
1063879565:338887 - 1063879565:357625 18738

это выдает прога типа

tSleep.tv_sec = 0;
tSleep.tv_nsec = 1;
for (i = 0; i < 10; i++)
{
gettimeofday(&t, NULL);
nanosleep(&tSleep, NULL);
gettimeofday(&t1, NULL);

PrintTimeVal(t);
printf(" - ");

PrintTimeVal( t1);
delta = Delta(t, t1);
printf(" %d\n", delta);
}


Как же блин быть то.
Как часто линух переключает контексты?
Почему nanosleep и usleep cпять так много?

anonymous
()

Судя по тексту программы sleep длится от 12 до 20 милисекунд, что вполне ожидаемо. В Linux'е погрешность таймера около 10 милисекунд и сильнее всего это проявляется на коротких sleep'ах. Думаю, что на обычном Linux'е (в "user level" уж точно) невозможно решить описанную задачу. Может можно что-то сделать, если реализовывать прием данных на уровне ядра и тактироваться не от внутреннего таймера, а от внешего clock'ера, подавая тактовые импульсы на линию прерывания nINTR (pin 10 по-моему), прием данных осуществлять в обработчике прерывания. А вообще-то, тут нужны какие-нибудь RealTime расширения, которые обсуждались выше.

AVI
()
Ответ на: комментарий от AVI

>>Может можно что-то сделать, если реализовывать прием данных
>>на уровне ядра и тактироваться не от внутреннего таймера,
>>а от внешего clock'ера, подавая тактовые импульсы на
>>линию прерывания nINTR (pin 10 по-моему),
>>прием данных осуществлять в обработчике прерывания.

А в EPP режиме порт все равно будет генерировать прерывания?

anonymous
()

Про прерывание в EPP режиме точно сказть не могу, потому что сам не пробовал его обрабатывать. По спецификации вроде должно генериться.

AVI
()
Ответ на: комментарий от AVI

AVI, eще раз спасибо огромное, по прерыванию все работает на 5 с плюсом.

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