nanosleep()

Michal Ludvig mic na logix.cz
Pondělí Září 28 23:08:16 CEST 1998


On Mon, 28 Sep 1998, Smolik Daniel wrote:

> Dobry den,
> Portuji pod Linux svuj universalni programator cehokoli, je pripojeny na
> paralelni port a potrebuji cekat po presne definovany cas usek.
> Nejkratsi cas co mi staci je 
> 1ms. Koukl jsem a pouzil funkci nanosleep. Predtim jsem pomoci
> sched_setscheduler()
> nastavil prioritu na 99 na scheduler na FIFO_SCHED. Casy jako 1ms a 2ms
> sly v pohode, ale jake bylo moje prekvapeni kdyz jsem zjistil ze cas od
> 3 do 10ms trva vzdy 20ms. Netusite nekdo cim to je ?

S podobnym problemem jsem se take potykal. Myslim, ze pricina je v
rozdilnem zpusobu cekani na kratke a dlouhe intervaly (kratsi pouziva
busyloop a na delsi se pouziva alarm z internich hodin). 

Nejdriv jsem to resil modifikaci jadra, tak aby mi pri kazdem "tiknuti"
volalo moji funkci zavadenou z modulu, ale pak jsem si rekl, ze je
zbytecne znovuobjevovat kolo a pouzil jsem rt-linux. Pokud to portujete
jen pro vlastni potrebu, tak by vam to nemuselo vadit a pokud ten
programator chcete prodavat, tak si stejne kazdej muze nabootovat rt-linux
na tu dobu co bude "univerzalne programovat" ;-)

Psat pro rt-linux vubec neni tak slozite, jak se vam mozna na prvni pohled
muze zdat - cela aplikace ktera neco provadi je normalne v user-space a
pres /dev/rtf? (coz jsou znakovy zarizeni chovajici se jako FIFO)
komunikuje s modulem zavedenym do jadra, ktery po nastavenych casovych
usecich neco dela. Je to pomerne jednoduche a velmi spolehlive.

Michal Ludvig




Další informace o konferenci Linux