Kezdőlap › Fórumok › Programozás › Interrupt kezelés (Signal handling)
- This topic has 4 hozzászólás, 4 résztvevő, and was last updated 21 years, 9 months telt el by
Lacek.
-
SzerzőBejegyzés
-
2003-08-04-14:13 #1910418
Hello!
A problémát többféleképpen is meg lehet oldani. Semmilyen kódrészlet vagy vázlat nem áll rendelkezésre, így tippelésnek látszó vaktában lövöldözésre nem vállalkozom.
http://en.tldp.org/HOWTO/Serial-Programming-HOWTO/
http://home.ozonline.com.au/davmac/davpage…x/async-io.html
http://www.atnf.csiro.au/people/rgooch/lin…/io-events.html2003-08-05-09:39 #1910419Atnezve a fenti doksikat atfogalmazom a kerdest: A Serial Programming HOWTO 3.3-as peldajat irtam at ugy, hogy a signal_handler_IO fuggveny 3 parametert kapjon. Ekkor a masodik parameter egy siginfo_t * tipusu pointer. A siginfo_t pedig tartalmazza az si_code mezot, es ebben keresem a SIGPOLL ertekeit.
A fentiekhez a man sigaction – ben talaltam segitseget.
Szoval az igy megirt programban ha a signal_handler_IO megkapja a vezerlest, a siginfo_t -ben levo si_code MINDIG 0x80 erteku fuggetlenul attol, hogy adatot kuldok, vagy adatot fogadok a modemmel.
2003-08-05-15:53 #1910420Régen foglalkoztam szignálokkal, de úgy rémlik a stream-eknél a szignálok alapból ki vannak kapcsolva, hogy ne keveredjenek össze, és ne hívódjon meg feleslegesen. Jelenleg a példa alapján csak fogadni tudod, és még be kell kapcsolni az adott stream szignálküldését (csak amelyeket fogadni akarod):
Code:if (ioctl (fd, I_SETSIG, S_INPUT | S_OUTPUT | S_MSG | S_HANGUP | S_ERROR) < 0) Error();2003-08-05-16:20 #1910421Amennyire en tudom, a si_code mindig 0x80 lesz, mert az csak azt tartalmazza, hogy ki kuldte a jelet. Ebben az esetben mindig a kernel kuldi, szoval ott mindig SI_KERNEL (=0x80) lesz. Ha a si_signo==SIGIO, akkor a si_band reszeben nezz korul a kapott structnak, ez elvileg majd tartalmazza a POLL_.* dolok valamelyiket.
Esetleg nezegesd a /usr/include/asm/signal.h -ban a siginfo_t deklaraciojat, a man siginfo nkem kisse szukszavunak tunt…2009-12-04-19:55 #1870290
Sziasztok!Hogy lehet (C-ben, SuSE 8.0 alatt) a soros portra megszakitaskezelot irni ugy, hogy az a „hagyomanyos” flageket megkapja parameterkent? Vagyis a rutin parameterei kozott legyen az, hogy miert hivodott meg: kifogyott a kuldopuffer, uj karakter erkezett, tulcsordulas, stb.
A sigaction manpage-bol szedtem ossze, amit tudtam, de nem ertem, miert nem kapom meg az si_code-ban a POLL_IN, vagy POLL_OUT kodokat. Mindig SI_KERNEL (0x80) kod erkezik meg.
Az si_code tartalmazna az interrupt kivalto okat.
Kosz minden segitseget!
Udv, p-cs
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz