Warning
This page is located in archive.

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

courses:b3b36prg:tutorials:serial [2018/02/06 17:18] (current)
Line 1: Line 1:
 +{{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 ''<​termios.h>'',​ 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
 +
 +<code c>
 +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);
 +</​code>​
 +
 +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ř.
 +<code c>
 +
 +int serial_close(int fd)
 +{
 +   ​return close(fd);
 +}
 +
 +int serial_putc(int fd, char c)
 +{
 +   ​return write(fd, &c, 1);
 +}
 +</​code>​
 +
 +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"​ =====
 +*/
courses/b3b36prg/tutorials/serial.txt · Last modified: 2018/02/06 17:18 (external edit)