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

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]
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)