[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