{{indexmenu_n>4100}} ===== Nastavení sériového portu ====== Přestože je sériový port blokové zařízení, které je v OS reprezentované souborem v adresáři ''/dev/'' a lze s ním tak pracovat jako s běžným souborem funkcemi ze standardní knihovny např. ''fopen()'' nebo ''fwrite()'', je z důvodu přímého přístup výhodnější využít funkce systémové knihovny jako jsou ''open()'', ''close()'', ''read()'' a ''write()''. Tyto funkce nepracují s ukazatelem na strukturu ''FILE*'', ale přímo s tzv. //file deskriptorem//, který je reprezentovaný celým číslem typu ''int''. Nastavení parametrů komunikace je možné prostřednictvím funkce knihovny '''', například nastavení rychlosti 115200 bps spolu s VMIN a VTIME (viz např. [[http://unixwiz.net/techtips/termios-vmin-vtime.html|Understanding UNIX termios VMIN and VTIM]]) lze ralizovat int fd = open(fname, O_RDWR | O_NOCTTY | O_SYNC); struct termios term;prg_serial.h a tcgetattr(fd, &term); cfmakeraw(&term); term.c_cc[VTIME] = 2; //set vtime term.c_cc[VMIN] = 1; cfsetispeed(&term, BAUD_RATE); cfsetospeed(&term, BAUD_RATE); tcsetattr(fd, TCSADRAIN, &term) >= 0); fcntl(fd, F_GETFL) >= 0); tcsetattr(fd, TCSADRAIN, &term); fcntl(fd, F_GETFL); tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &term); kde pro jednoduchost netestujeme hodnoty návratových hodnot volání jednotlivých funkcí. Pro znakově orientovaný vstup/výstup pak můžeme zapouzdřit volání read/write do samostatných funkcí např. int serial_close(int fd) { return close(fd); } int serial_putc(int fd, char c) { return write(fd, &c, 1); } Příslušné funkce pro otevření, zavření a čtení/zápis znaku jsou implementované v modulu {{:courses:b3b36prg:tutorials:prg_serial.zip|prg_serial}}. /* ===== Neblokovaný režim a "polling" ===== */