Portál AbcLinuxu, 10. května 2025 22:28
//otevreni seriaku fd=open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NONBLOCK); //zajisteni spojeni mezi soub.deskript. a komun. portem if(fd<0){ printf("\033[38mProblem pri otevirani serioveho portu.\033[0m\n\n"); perror("/dev/ttyUSB0"); return(1); } printf("\033[32mSeriovy port otevren v poradku.\033[0m\n"); saio.sa_handler = funkce_pri_preruseni; sigemptyset(&saio.sa_mask); saio.sa_flags = 0; saio.sa_restorer = NULL; sigaction(SIGIO,&saio,NULL); //povolit procesu prijmout SIGIO fcntl(fd, F_SETOWN, getpid()); fcntl(fd, F_SETFL,O_NONBLOCK | FASYNC); / tcgetattr(fd,&oldtio); //zaloha puvodniho nastaveni portu //nastaveni portu - Canonnical Input - radek ukoncen znakem ASCII LF newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR | ICRNL; newtio.c_oflag = 0; // newtio.c_lflag = ICANON; newtio.c_cc[VMIN]=1; newtio.c_cc[VTIME]=0; tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); write(fd,.....
fcntl(fd, F_SETFL,O_NONBLOCK | FASYNC);
Nastavením O_ASYNC žádáš, aby jádro poslalo SIGIO pokaždé, když je deskriptor připraven přijímat nebo dodat data; drtivou většinu SIGIO dostáváš proto, že deskriptor hlásí připravenost k přijetí dalších dat.
Jiná otázka je, co s tím
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.