Posted By: Quasimodo (Quasimodo) on 'CZprogram' Title: Re: Jak se dostat pod 55ms? (RT-linux) Date: Thu Feb 21 15:03:14 2002 > > Nojo, jsem mamlas, pod Linuxem to hazi krasne po milisecundach! Tak to > uz > > me > > to netrapi, cert vem Okna. Dik za podnety :-) > Pod linuxem na intelu jede casovac na 100Hz (10ms), na alfach je nastaven na > > 1kHz. Obecne ma linux celkem problemy cekat kratsi dobu, nez je frekvence > casovace. Jedna z moznosti je prekompilovat jadro se zmenenou konstantou HZ, > > na nejake pokusy jsem pouzival linux s 1kHz a fungovalo to bez problemu(nebo > > jsem si spis zadnych nevsiml, nektere casti jadra pouzivaji jine konstanty > nebo predpokladaji tvrde 100Hz). > > Dalsi moznosti by mohlo byt pouzit RTLinux > > > David Navara (kdysi Sky) - www.nuabi.com > Xyster No, pod rtlinuxem se da cas zjistit s presnosti na nanosekundy - gethrtime() vraci cas od startu systemu v nanosekundach, hrtime_t je 64bitovy int, takze to hned tak nepretece. Je mozne spoustet s presnosti na nanosekundy pomoci pthread_make_periodic nebo trosku nebezpecneji rt_task_make_periodic. ALE jenom v modulu. V userspace aplikaci rtlinux nenabizi pro casovani nic navic. Lze pouzit std linuxovou fci usleep nebo nanosleep, ale to je znamena prepnuti kontextu na nejmene uvedenou dobu a ne na prave uvedenou dobu, navic je mozne preruseni signalem. Jednoduchy programek #include <unistd.h> #include <time.h> #include <sys/time.h> #include <iostream> int main() { struct timespec treq, trem; struct timeval tbefore, tafter; treq.tv_sec = 0; treq.tv_nsec = 1; trem = treq; // Samotne mereni gettimeofday(&tbefore,0); nanosleep(&treq, &trem); gettimeofday(&tafter,0); long long before, after; before = tbefore.tv_usec + tbefore.tv_sec * 1000000; after = tafter.tv_usec + tafter.tv_sec * 1000000; cout << after - before << endl; return 0; } bude vracet v zavislosti na HW ruzne velka cisla v mikrosekundach. Radove se ale bude jednat o desitky tisic. (Na mem P3/933 od 13000 do 22000, kdyz bezel jen tento jediny proces a par cekajicich xtermu). Obavam se, ze pokud clovek nepouzije sleep a bude zajistovat cekani cyklem, dokud se nedocka jiste hodnoty, osklive narazi na neocekavana prepnuti kontextu. Proste pokud je zapotrebi pracovat s nejakymi garantovanymi casy, bude nutne sahnout bud po modulu nebo pracovat v single-task OS. Urcite reseni by mohlo byt spise QNX - pro nekomercni vyuziti je, myslim, zdarma. - Clovek je nejpomalejsi zname zarizeni typu I/O. Quasimodo