[LUGOS-PROG] Milisekundni stevec

Ales Bardorfer alesb at robo.fe.uni-lj.si
Wed Nov 6 09:59:18 CET 2002


On Wed, 6 Nov 2002 davorin.robba at ensico.si wrote:

> Ziv..
> 
>   Zal morajo biti vsaj milisekunde. Na majhnem kontrolerju (PC baziran 
na 486) smo razvili aplikacijo (napisana v C/C++), ki tece na linuxu. V 
aplikaciji rabimo milisekundni cas za sinhronizacijo in racunanje 
timeout-ov.
>   Pri pregledu funkcij sem opazil, da vse jemljejo cas iz sistemske 
ure, ki pa se jo da spreminjati. Ob spremembi ure pa se racunalniku zmesa 
in odleti. Rabimo tako funkcijo, ki recimo vrne uptime izrazen v 
milisekundah. Na windows-ih je to GetTickCount(). Po mojem mora kaj 
takega obstajati tudi na linux-u.

Naceloma lahko vrednost, ki jo dobis iz Pentium TSC registra (RDTSC, ki ga 
opisuje Primoz) preracunas tudi v milisekunde...

Vseeno pa pa me zanima nekaj drugega... Kaj ta kontroler pocne? Namrec 
proces non-real-time operacijskega sistema (Linux tu ni izvzet) se ni 
zmozen izvajati z milisekundno natancnostjo ali pod njo. Torej razmere, 
kjer bi vsako milisekundo nekaj naredil (komulikacija s hadrwareom) na 
non-real-time operacijskem sistemu niso mozne in za "normalne" 
aplikacije tudi niso potrebne oz celo nezaljene.

Tvoje aplikacije sicer ne poznam, vendar ce zahteva hard-real-time 
(izvajanje v "pravem realnem casu"), ti priporocam, da jo implementiras na 
hard-real-time operacijskem sistemu. Naprimer Real Time Linux-u:

ftp://ftp.fsmlabs.at/pub/rtlinux

Le-ta temelji na majhnem real-time jedru, ki poganja celoten Linux OS kot 
nit z najnizjo prioriteto. Tvoja aplikacija bi potem tekla kot nit z visjo 
prioriteto kot Linux OS. Tako zagotovis, da se dolocena koda 
izvaja cesovno zelo tocno (t +/- 8 do 40 mikrosekund (mikro! ne 
mili), odvisno od osnovne plosce in delno od procesorja).
Tehnicno to izgleda tako, da svojo aplikacijo 
napises kot modul, ki ga vkljucis v jedro, le ta pa s procesi linux-a 
lahko komunicira preko cevi (fifo) ali skupnega pomnilnika (shared mem.).  
Zal pa v tem modulu ne mores / ne smes uporabljati funkcij operacijskega 
sistema, tako da je skoraj 100%, da tvoja aplikacija ne bi 
ostala nespremenjena. Bistvo RT-Linux-a je v tem, da razdelis svojo 
aplikacijo na kernel space del (modul), ki se izvaja casovno zelo tocno in 
user-space del (proces, executable), ki skrbi za komunikacijo z RT delom.

Seveda pa je za to potrebno prevesti (spremenjeno) linux jedro.

lp,
Ales
 -- 
/*****************************************************************
*                                                                *
* Ales Bardorfer, univ.dipl.ing.el                               *
* Laboratory of Biomedical Engineering and Robotics              *
* Faculty of Electrical Engineering        tel.: +386 1 4768 484 *
* Trzaska 25, SI-1000 Ljubljana, Slovenia  fax.: +386 1 4768 239 *
* http://robo.fe.uni-lj.si/staff-11.html                         *
* mailto:alesb at robo.fe.uni-lj.si                                 *
*                                                                *
*****************************************************************/




More information about the lugos-prog mailing list