linux串口编程 文档

linux串口编程 文档

ID:41032368

大小:52.74 KB

页数:30页

时间:2019-08-14

linux串口编程 文档_第1页
linux串口编程 文档_第2页
linux串口编程 文档_第3页
linux串口编程 文档_第4页
linux串口编程 文档_第5页
资源描述:

《linux串口编程 文档》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、select/termios从网上收集的一些linux串口通信资料,非常有用。源地址不详~请见谅6select函数select(I/O多工机制)表头文件#include#include#include定义函数intselect(intn,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout);函数说明select()用来等待文件描述符状态的改变。若状态改

2、变则该函数返回。参数n代表最大的文件描述符加1,参数readfds、writefds和exceptfds称为描述符组,是用来回传该描述符的读,写或例外的状况。底下的宏提供了处理这三种描述符组的方式:fd_setset;  FD_ZERO(&set);/*将set清零使集合中不含任何fd*/  FD_SET(fd,&set);/*将fd加入set集合*/  FD_CLR(fd,&set);/*将fd从set集合中清除*/  FD_ISSET(fd,&set);/*测试fd是否在set集合中*/参数  使用se

3、lect函数的过程一般是:  先调用宏FD_ZERO将指定的fd_set清零,然后调用宏FD_SET将需要测试的fd加入fd_set,接着调用函数select测试fd_set中的所有fd,最后用宏FD_ISSET检查某个fd在函数select调用后,相应位是否仍然为1。timeout为结构timeval,用来设置select()的等待时间,其结构定义如下structtimeval{time_ttv_sec;time_ttv_usec;};错误代码执行成功则返回文件描述符状态已改变的个数,如果返回0代表在描述

4、符状态改变前已超过timeout时间,当有错误发生时则返回-1,错误原因存于errno,此时参数readfds,writefds,exceptfds和timeout的值变成不可预测。timeout为NULL时表示阻塞,直到有数据才返回。EBADF文件描述符为无效的或该文件已关闭EINTR此调用被信号所中断EINVAL参数n为负值。ENOMEM核心内存不足6读串口是通过read函数来完成的read函数头文件#include函数原型ssize_tread(intfiledes,void*buff,size_tn

5、bytes);参数intfiledes-文件描述符void*buff-存储读取数据的数据缓冲区size_tnbytes-需要读取的字节数返回值ssize_t-成功读取返回读取的字节数,否则返回-1注意,在对串口进行读取操作的时候,如果是使用的RAW模式,每个read系统调用将返回当前串行输入缓冲区中存在的字节数。如果没有数据,将会一致阻塞到有字符达到或者间隔时钟到期,或者发生错误。如果想使read函数在没有数据的时候立即返回则可以使用fcntl函数来设置文件访问属性。例如:fcntl(fd,F_SETFL,

6、FNDELAY);]这样设置后,当没有可读取的数据时,read函数立即返回0。通过fcntl(fd,F_SETFL,0)可以设置回一般状态。例如:从终端读取5个字节的应答数据intnRead;/*从终端读取的字节数*/charbuffer[256];/*接收缓冲区*/nRead=read(fd,buffer,5);if(nRead==-1){fprintf(stderr,"Readanswermessageerror.");}八、终端配置8.1POSIX终端接口大多数系统都支持POSIX终端接口,POS

7、IX终端通过一个termios结构来进行控制,该结构定义在termios.h文件中。termios结构structtermios{tcflag_tc_iflag;/*输入选项标志*/tcflag_tc_oflag;/*输出选项标志*/tcflag_tc_cflag;/*控制选项标志*/tcflag_tc_lflag;/*本地选项标志*/cc_tc_cc[NCCS];/*控制特性*/};c_iflag成员FlagDescriptionGNBRK忽略输入中的BREAK状态BRKINT如果设置了IGNBRK,将忽

8、略BREAK。如果没有设置,但是设置了BRKINT,那么BREAK将使得输入和输出队列被刷新,如果终端是一个前台进程组的控制终端,这个进程组中所有进程将收到SIGINT信号。如果既未设置IGNBRK也未设置BRKINT,BREAK将视为NUL同义字符,除非设置了PARMRK,这种情况下被视为序列377IGNPAR忽略桢错误和奇偶校验错误PARMRK如果没有设置IGNPAR,在有奇偶校验错误或者桢错误的字

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。