在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Linux串口IO模式的心得有哪些呢

118次阅读
没有评论

共计 1808 个字符,预计需要花费 5 分钟才能阅读完成。

Linux 串口 IO 模式的心得有哪些呢,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

众所周知,在 Linux 系统下所有设备都是以文件的形式存在,串口也一样。

通常 I / O 操作都是有阻塞与非阻塞的两种方式。

其中 超时 这个概念其实是阻塞中的一种处理手段,本质还是属于阻塞的 I / O 模式.

在 Linux 中串口的 IO 操作 本文将它分为三种状态:

阻塞状态

超时状态

非阻塞状态

这三种状态的转换组合有这么几种:

阻塞 — 超时

阻塞 — 非阻塞

超时 — 阻塞

超时 — 非阻塞

非阻塞 — 阻塞

我们一个一个来分析

首先在一个串口的描述符打开的时候指定它的模式是阻塞还是阻塞

fd = open(/dev/tttyS0 ,O_RDWR | O_NOCTTY);// 以阻塞模式打开串口  fd = open(/dev/tttyS0 ,O_RDWR | O_NOCTTY | O_NDELAY);// 以非阻塞模式打开串口  //O_NDELAY  等价于  O_NOBLOCK

当一个串口是阻塞状态的时候便可以设置它为超时状态。

利用 struct termios 的 cc_t c_cc[NCCS] 成员

c_cc[VTIME] 非规范模式读取时的超时时间(单位: 百毫秒)

c_cc[VMIN] 非规范模式读取时的最小字符数

如需需要设置超时则 c_cc[VMIN] 必须等于 0。这代表能够读取的最小字符是 0 个,即使用 read 读取数据超时 read 返回 0

有一个需要注意的地方!

当 c_cc[VTIME] 设置为 0 且 c_cc[VMIN] == 0 的时候, 代表超时 0 秒 (姑且这么叫吧!) 这个时候使用 read 读取数据会立即返回(有读到数据时返回字节数,没有数据和一般超时一样返回 0)但是,虽然这时候在现象上看起来和非阻塞模式一样 (read 都不会阻塞) 但返回值不同

非阻塞模式: read 没有读到数据立即返回 -1

超时 0 秒时: read 没有读到数据立即返回 0 (设置了超时的阻塞模式)

ret = read(fd,recvbuf,BUF_SIZE); if(ret == -1)// 非阻塞模式时 无数据返回  { //do something } ret = read(fd,recvbuf,BUF_SIZE); if(ret == 0)// 阻塞模式设置超时 0 秒时 超时返回  { //do something }

虽然表现形式一样,但在编程时必须要了解自己使用的是哪一种模式和串口当前的状态才能更好的分析和处理问题。

这里说一下我曾经遇到过的一个问题:

我在打开串口时使用阻塞模式打开,但是没有设置 c_cc[VMIN]的值,而它初始化后就是 0, 所以发现串口没有被阻塞,其实原因就是串口模式还是阻塞模式没错,但是它是超时 0 秒的状态,所以在没有数据到达时 read 也返回了。

阻塞状态和非阻塞状态的切换

非阻塞状态时使用

fcntl(fd,F_SETFL,0);

即可转换成阻塞状态,同样可以设置超时

当非阻塞状态已经设置了超时时,在转换成阻塞状态后超时也随同生效

阻塞状态时使用

fcntl(fd,F_SETFL,FNDELAY); //FNDELAY 等价于 FNONBLOCK

即可转换成非阻塞状态,超时失效

这里提一下 fcntl.h 中几个宏的定义

/* Define some more compatibility macros to be backward compatible with BSD systems which did not managed to hide these kernel macros. */ #ifdef __USE_BSD # define FAPPEND O_APPEND # define FFSYNC O_FSYNC # define FASYNC O_ASYNC # define FNONBLOCK O_NONBLOCK # define FNDELAY O_NDELAY #endif /* Use BSD. */

现在一目了然了吧?打开串口时非阻塞模式的 O_NDELAY 或 O_NONBLOCK 选项

fcntl 设置非阻塞模式的第 3 个参数 FNDELAY 或者 FNONBLOCK 其实都是 O_NONBLOCK 主要就是为了兼容

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计1808字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲高清一区二区三区 | 久久强奷乱码老熟女网站 | 交换国产精品视频一区 | 久久男人天堂 | 亚洲国产精品视频 | 亚洲毛片无码专区亚洲乱 | 久久网免费 | 亚洲乱妇老熟女爽到高潮的片 | 一级做a爰片久久毛片潮喷 一级做a爰片久久毛片看看 | 国产成年无码久久久久毛片 | 狠狠色噜噜狠狠狠888米奇视频 | 久久亚洲av成人出白浆无码国产 | 欧美在线视频一区在线观看 | 最近中文字幕大全在线电影视频 | 成人免费草草视频 | 91免费播放人人爽人人快乐 | 永久视频在线观看 | 国产自产拍精品视频免费看 | 在线观看成人免费视频 | 波多野结衣av无码久久一区 | 欧美色第一页 | 天天鲁天天爱天天鲁天天 | 国产熟女乱子视频正在播放 | 亚洲精品久久久久久久久久久网站 | 久久久日韩精品国产成人 | 特级生活片 | 中文字幕第四页 | 网站在线播放 | 久草免费手机视频 | 毛片手机在线 | 久久夜色精品国产亚洲噜噜 | 国产偷人爽久久久久久老妇app | 门国产乱子视频观看 | 欧美一级做a爰片久毛片潮 欧美一级做a爰片免费 | 手机在线色视频 | 少妇粉嫩小泬喷水视频 | 国产成人综合在线观看 | 上司的丰满人妻中文字幕 | 国产农村老太xxxxhdxx | 成人亚洲精品久久久久软件 | 国产精品美女久久久免费 |