Interrupt kezelés (Signal handling)

Kezdőlap Fórumok Programozás Interrupt kezelés (Signal handling)

5 bejegyzés megtekintése - 1-5 / 5
  • Szerző
    Bejegyzés
  • #1910418
    gabaman
    Felhasználó

      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.html

      #1910419

      Atnezve 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.

      #1910420
      gabaman
      Felhasználó

        Ré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();
        #1910421
        Lacek
        Felhasználó

          Amennyire 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…

          #1870290
          csaba
          Felhasználó


            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

          5 bejegyzés megtekintése - 1-5 / 5
          • Be kell jelentkezni a hozzászóláshoz.