Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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 <termios.h>, například nastavení rychlosti 115200 bps spolu s VMIN a VTIME (viz např. 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 prg_serial.

courses/b3b36prg/tutorials/serial.txt · Last modified: 2018/02/06 17:18 (external edit)