[linux-ileri] Re: Seri porttan interrupt - Serdar Hoca'ya

---------

From: Derya Sezen (funky@gsu.linux.org.tr)
Date: Thu 21 Aug 2003 - 14:05:27 EEST

  • Next message: Serdar KÖYLÜ: "[linux-ileri] Re: Seri porttan interrupt - Serdar Hoca'ya"

    turkce karakterler sorun yapmish olabilir, duzeltilmish hali :

    Hocam yardiminiz icin tesekkurler. Isi kernel space'e girmeden bu
    sekilde halletmek iyi oldu ama cpu'a gelen interrupt'u da nasil
    yakalariz merak etmiyor degilim:)=20

    Neyse, asil sormak istedigim ayni kodda hem read() hem write() yapmak
    istiyorum , write() dedigim anda "I/O possible" diyerek programdan
    cikiyor. SIGIO almasini saglayan
    fcntl(fd, F_SETOWN, getpid());
    yu kaldirdigimda ise write'in dondugu deger dogru ama kars=FD tarafa bilgi
    gitmiyor. Benim sonucta ayn=FD programda hem read(), hem write() yapmak
    istedigime gore programin SIGIO almasini disable etmemem gerek. Bu
    baglamda anlam veremedigim write() yaptigimda programdan birdenbire
    cikmasinin nedeni...

    termios tanimlari :

    *********************

        tcgetattr(fd, &eski);
                                                                               =
                                                     =20
        yeni.c_cflag =3D baudrate | CRTSCTS | CS8 | CLOCAL | CREAD;
        yeni.c_iflag =3D IGNPAR | ICRNL;
        yeni.c_oflag =3D 0;
        yeni.c_lflag =3D ICANON;
        yeni.c_cc[VMIN]=3D1;
        yeni.c_cc[VTIME]=3D0;
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &yeni);

    **********************

    farkli olarak daha ayrintili

    ***********************

    tcgetattr(fd,&eski);
        cfsetispeed(&eski, BaudToConstant(baudrate));
        cfsetospeed(&eski, BaudToConstant(baudrate));
                                                                               =
                                                     =20
        eski.c_cflag |=3D (CREAD|CLOCAL);=20
        eski.c_cflag &=3D ~(CSIZE);
        eski.c_cflag |=3D CS8; =20
        eski.c_cflag &=3D ~(PARENB);=20
        eski.c_cflag &=3D ~(CSTOPB);=20
        eski.c_iflag &=3D ~(IXON | IXOFF);=20
        eski.c_cflag &=3D ~CRTSCTS; =20
        eski.c_lflag |=3D (ICANON);
        eski.c_lflag &=3D ~(ECHO | ECHOE | ISIG |ECHOK|ECHONL);
                                                                               =
                                                     =20
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &eski);

    ****************************

    da denedim. Ikisinde de olmadi. oflag'e de iflag deki gibi degerler
    verdim gene olmadi.=20

    Sonu=E7ta read() de sorun yasamiyorum. write() olayini nasil
    gerceklectirebilirim?!!? write() icin yaptigim sey :

    res =3D write(fd, buf, strlen(buf));
    printf("result: %d\n", res);

    Derya Sezen

    P.S. : baglantilarimda sorun yok. Sistemi iki bilgisayar arasinda
    denemekteyim. Karsi taraftaki veriyi okuyan koda minicom ile data
    gonderebiliyorum ama kendi kodumla g=F6nderemiyorum...

    tesekkurler


  • Next message: Serdar KÖYLÜ: "[linux-ileri] Re: Seri porttan interrupt - Serdar Hoca'ya"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.