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

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/bab36prga/tutorials/serial.txt · Last modified: 2018/02/06 17:18 (external edit)