Re: lug-bg: Funkcii pod prekyswane w Linux-a
- Subject: Re: lug-bg: Funkcii pod prekyswane w Linux-a
- From: zezo@xxxxxxx (Cvetan Ivanov)
- Date: Fri, 29 Jan 1999 02:42:13 +0200
Hi,
> Ima li nachin da se chete direktno I/O Port pod LINUX / UNIX, i da
za tova ima nqkolko nachina. ima i nqkakvo howto po vuprosa, no s 2 dumi
variantite sa takiva
a) open /dev/port ;seek (myport); read()
b) ioperm(port,num,access); inb(port); outb(val,port);
ako ne se luja pri b) programata trqbva da se kompilira s -O3 za da se
expandnat pravilno inb i outb
> se prawiat FUNCTION's pod prekyswane ( BPaskal-ski stil INTERRUPT),
> bez da se pishat moduli za KERNEL-a. Razgledah SOURCE-a na
tva s prekusvaniqta e slojno. v obshtiq sluchaj ne stava,no vse pak ima
razni hackove za celta. primerno Silly Interrupt Generator ot dosemu.
btw pisaneto na kernel module (char, za block e po-slojno) ne e tolkova
strashno kolkoto zvuchi na priv pogled. znachitelno po-lesno otkolkoto
pisaneto na driver za dos ili windows - naj-malkoto vsichko e
dokumentirano i ima dostatuchno primeri.
v obshtiq sluchaj cheteneto ot user space ne garantira mnogo dobri
vremena, shtoto procesa moje da e preemptnat ot neshto drugo. ako stava
vupros za razreshavashta sposobnost > 10ms (edin tick) nqma osobeni
problemi, no nqma i garanciq kakvo tochno stava.
> prekyswane, ako sym go razbral prawilno :). Moga da byda i po-iasen,
> ako se nameri merakliia da mi pomogne, za koeto sym mu blagodaren
> predwaritelno.
nqkakvi podrobnosti mogat da pomognat :)
> P.S. Tyi kato za prekyswaneto ochakwam otricatelen otgowor, pone
> syshtestwuwa li standartna LIB funkciia, s FIFO za COMPort-a, i ako
> DA, koia e tia? I da ne e s "izchakwane", ako broia na baitowete e
> po-malyk ot zaiaweniia za chetene, a da wryshta broia na realno
> prochetenite wednaga !
nqma mnogo znachenie dali samiq port ima FIFO ili ne, zashtoto tty-to
taka ili inache ima bufer.
pod UNIX terminal i/o-to e mnogo kosmata rabota. v obshtiq sluchaj edno
tty ima [izmejdi mnogoto drugi] slednite parametri (po pamet):
threshold, timeout.
i pri blocking i/o read(tty,buf,10) moje da se poluchat razlichni
rezultati
a) read-a ne vrushta dokato nqma 10 (ili EOF, primerno modem hangup)
b) pri timeout=N thresh=M ako za N sekundi pristingat < M chars se
vrushta X=kolkoto ima, a ako dojdat M se vrushta M
c) pri timeout=0 se vrushta 1 vednaga sled kato dojde byte
d) read(tty,buff,1) vinagi shte vurne 1 vednaga sled kato dojde neshto
moje bi ima oshte edna promenliva, primerno line buffering on/off ili
neshto ot sorta
ichko tova go pishe nqkude okolo man stty
btw read() se prekusva ot SIGALRM i taka se realizirat timeouti
zezo
==================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers)
For more send to lug-bg-request@xxxxxxxxxxxx a single word 'info'
==================================================================
|