子宫占位是什么意思| 一个女一个以念什么| np是什么| 什么样的人容易猝死| 宫颈息肉不切除有什么危害| 精油是干什么用的| 为情所困是什么意思| 62岁属什么生肖| 丹青是什么| 津是什么意思| 隼读什么| 口臭去医院挂什么科室看病| 一个金字旁一个川读什么| 尿蛋白高是什么原因引起的| 姨妈期可以吃什么水果| 指甲断裂是什么原因| 手麻是什么引起的| 为什么会抽筋| 早上起来腰疼是什么原因| 有福是什么意思| 口苦吃什么药最好| 打玻尿酸有什么副作用吗| 长孙皇后叫什么名字| 来月经腰疼是什么原因| 2022年是什么生肖| 送医生什么礼物好| 六月初六是什么日子| 令加瓦读什么| 相声海清是什么意思| 双子座和什么座最配| 突然全身抽搐是什么病| 87属什么| 手总是发麻是什么原因| 急性上呼吸道感染是什么引起的| 生水是什么意思| 吴亦凡演过什么电影| innisfree是什么牌子的化妆品| 坚果补充什么营养成分| 变节是什么意思| 什么样的头发| 人体的三道防线是什么| 脚癣是什么原因引起的| 莲子心泡水喝有什么功效和作用| 处大象是什么意思| 老人经常便秘有什么好办法| 莲藕什么时候种植最佳| 看看我有什么| 我国的国球是什么球| 嚷能组什么词| 神经内科和神经外科有什么区别| 早些泄挂什么科| 孩子睡觉咬牙齿是什么原因引起的| 结婚20年是什么婚| 鼓目念什么| 大头瘟现代叫什么病| 薤是什么菜图片| 监督是什么意思| 吃什么水果可以变白| 1976年是什么命| 白内障是什么症状| 人为什么会发热| 喝黑豆浆有什么好处| 一什么篮子| 吃胡萝卜有什么好处| 肝郁脾虚吃什么药效果最好| 尿酸过高是什么原因| 胃蛋白酶原1偏低是什么意思| 吃什么药能让月经马上来| 骨密度是查什么的| 中国的母亲河是什么河| 马马虎虎指什么生肖| 什么样的普洱茶才是好茶| 基诺浦鞋属于什么档次| 切脉切的是什么脉| 拔完智齿可以吃什么| 金生水什么意思| 孤注一掷什么意思| 记性越来越差是什么原因| 什么然有序| 天伦之乐是什么意思啊| 离卦代表什么| 肠炎可以吃什么食物| 血小板为什么会减少| 抗糖是什么意思| 打马虎眼是什么意思| pet是什么检查| 术后吃什么营养品好| 5.20是什么星座| 驼背挂什么科| 便秘什么原因引起的| 性激素六项什么时候查最准确| 什么肠小道成语| 什么是极差| 男扮女装是什么意思| 易经和周易有什么区别| 老鸭汤炖什么好吃| 离歌是什么意思| casio手表是什么牌子| 生产方式是什么| 女人出黄汗是什么原因| 男人勃不起是什么原因造成的| 慢性胰腺炎吃什么药效果最好| 什么男什么女的成语| 什么是眩晕症| 脚后跟疼是什么原因引起的| 经常流鼻血是什么病的前兆| 什么手组词| 冰冻三尺非一日之寒什么意思| 唇周围长痘痘是什么原因| 早上眼屎多是什么原因| 头疼是因为什么| 2028年属什么生肖| 通字五行属什么| 痰多咳嗽是什么原因| 赛字五行属什么| 老年人便秘吃什么好| 斑鸠和鸽子有什么区别| 对公转账是什么意思| 什么高什么低| 黑色素缺失吃什么补充最快| 吃什么软化血管| 体检需要注意什么| 孕妇不能吃什么| 县级干部是什么级别| 阑尾是什么器官| 寿者相什么意思| 什么网名好| 团长一般是什么军衔| 什么是熬夜| 收缩压偏高是什么意思| 剖腹产后可以吃什么食物| 体检喝水了有什么影响| 沙僧为什么被贬下凡间| 两性是什么意思| 春梦了无痕是什么意思| 苯扎氯铵是什么| 椎管狭窄吃什么药| 车前草有什么功效| 什么汤什么火| 吃什么排便顺畅| 似乎的近义词是什么| 柠檬不能和什么一起吃| tspot检查阳性能说明什么| 血糖有点高吃什么食物好| 糖料病者应吃什么好| 办身份证需要带什么| 生的反义词是什么| 风包念什么| 乳腺3类是什么意思| 什么的杏花| 脉数是什么意思| 华在姓氏里读什么| 洋酒是什么酒| 补气血吃什么食物最好| 为什么打死不吃骡子肉| 山姆是什么| 手经常发麻是什么原因| davena手表什么牌子| 碧霄是什么意思| 感冒后咳嗽吃什么药| 牛欢喜是什么| 身宫是什么意思| vjc是什么品牌| 牙龈出血缺什么| cm代表什么单位| 补体c1q偏高说明什么| 邪魅一笑是什么意思| 什么是超度| 垂体分泌什么激素| 盐酸氟桂利嗪胶囊治什么病| 警察两杠一星是什么级别| 西红柿可以做什么菜| 防微杜渐是什么意思| 乳腺结节有什么危害| 双肺斑索是什么意思| 头发打结是什么原因| 幼儿园什么时候放暑假| 为什么月亮是红色的| 嘴唇上火吃什么药| 冬枣什么时候上市| 落英缤纷是什么意思| 呼吸衰竭是什么意思| 金刚藤有什么功效| 宠物蛇吃什么食物| 飞蛾吃什么| 北京大学校长是什么级别| 小孩放臭屁是什么原因| 此情可待什么意思| 靶向药是什么| 口坐念什么| 耳闷耳堵是什么原因引起的| 胃反酸是什么原因造成的| 风湿因子高是什么原因引起的| 什么干什么燥| 小s和黄子佼为什么分手| 寂寞是什么意思| 端着是什么意思| 更年期失眠吃什么药效果好| 房间朝向什么方向最好| 什么是尿失禁| 新疆是什么气候| 10月13是什么星座| 眼底出血是什么症状| 释然什么意思| 右肋下疼痛是什么原因| bmi是什么意思啊| cr是什么检查| 同仁是什么意思| 历年是什么意思| 福星是什么意思| 鼻子两侧挤出来的白色东西是什么| 星光是什么意思| 无后为大的前一句是什么| 专科什么意思| 口蜜什么剑| 左侧头皮发麻是什么原因| 眼睛胀痛什么原因| 7月出生是什么星座| 破屋什么意思| 小孩吃鹅蛋有什么好处| 背靠背是什么牌子| 猪冲什么生肖| 恋爱观是什么| 什么是备皮| 仙人跳什么意思| 朝乾夕惕什么意思| 鹿参膏有什么作用和功效| 又拉肚子又呕吐是什么原因| 小产什么意思| 嗷嗷待哺是什么意思| nos是什么单位| 什么的小球| 红茶加枸杞有什么功效| 形影不离是什么意思| 局长是什么级别| 肺部真菌感染吃什么药| 虫毛读什么| 糯米粉可以做什么好吃的| 吃什么饭| zero是什么牌子| 嘴巴麻是什么原因| 埋线是什么| 君子兰叶子发黄是什么原因| 血压低吃什么补| 什么林什么染| 0.618是什么意思| 脊柱炎是什么症状| 消化腺包括什么| 做梦梦见火是什么意思| 孙五行属什么| 犯法是什么意思| 三百多分能上什么大学| 次第花开是什么意思| 检查乳房挂什么科| 替拉依是什么药| 小巫见大巫是什么意思| Op是什么| 奶嚼口是什么| 尿蛋白十1是什么意思| 什么西瓜最好吃| 便秘是什么症状| 鼓的偏旁部首是什么| 经常拉肚子是什么原因引起的| 看见蜈蚣有什么预兆| 百度
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

事业单位面试热点话题之不回避问题,也不过度承诺

冬至子 ? 来源:出出啊 ? 作者:出出啊 ? 2025-08-05 10:30 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

测试环境

开发板: NK-980IOT V1.0 的开发板
rt-thread 版本:4.1.1
IDE:keil + env

启用 posix

首先,启用 DFS:”RT-Thread Components” -> “DFS: device virtual file system” 。进入子菜单,选择

“Using posix-like functions, open/read/write/close”
“ Using devfs for device objects”

其它项可以取消选择。

然后进入 “RT-Thread Components” -> “C/C++ and POSIX layer” -> “POSIX (Portable Operating System Interface) layer” 子菜单项,选择

“Enable POSIX file system and I/O”
“Enable I/O Multiplexing select() “
“Enable Terminal I/O “

其它项可以取消选择。

测试

我们继续使用 rt-thread 驱动篇 之 serialX 全网公测 提供的测试方案,但是把里面的读写 API 改一改,rt_device_open 改成 open,rt_device_read 改成 read,rt_device_write 改成 write,rt_device_close 改成 close。

我们知道, open/read/write/close 分别对应调用 dfs_file_(open/read/write/close) 进而调用 struct dfs_file_ops 结构体中定义的 open/read/write/close 接口。在串口驱动框架里就是 serial_fops_(open/read/write/close) 等几个函数。

serial_fops_open

需要说明的是,我们只能选择“中断”或者“DMA”中的一种模式了。另外,除了 O_RDONLY O_WRONLY O_RDWR 三种读写标志,还可以支持 O_NONBLOCK ,它等于 RT_DEVICE_OFLAG_NONBLOCKING。

serial_fops_read

原来的实现有如下一个 while 循环,这个循环的本意是:非阻塞模式下,如果没有 read 到数据返回 -EAGAIN 错误值,告知应用层无数据并可以再次读;阻塞模式下,如果没有 read 到数据将等待工作队列而挂起线程。

do
{
    size = rt_device_read(device, -1, buf, count);
    if (size <= 0)
    {
        if (fd- >flags & O_NONBLOCK)
        {
            size = -EAGAIN;
            break;
        }
        rt_wqueue_wait(&(device- >wait_queue), 0, RT_WAITING_FOREVER);
    }
}while (size <= 0);

这和原来 serialX 的阻塞模式概念是一致的,如此一来,我们发现阻塞模式时 rt_device_read 先阻塞了,并不会走到 if 条件语句块内。

flush 概念

大家一定知道,flush 支持是 serialX 独有的,v1 v2 没有这个。当我们开启 posix 之后,发现 dfs 实现了一个函数 fsync ,同时还有一个 dfs_file_flush 函数,以及 struct dfs_file_ops 也定义了 flush 接口。只是在之前的版本里这个都没有实现。于是,我们对 “serialX.c” 做如下修改

找到 const static struct dfs_file_ops _serial_fops = 变量定义代码行,将 RT_NULL, /* flush / 修改为 serial_fops_flush, / flush */ 。然后在上面添加 serial_fops_flush 函数实现:

static int serial_fops_flush(struct dfs_fd *fd)
{
rt_device_t device;
device = (rt_device_t)fd->data;
return rt_device_flush(device);
}

瞧,serialX 的 flush 和 dfs 的 flush 以及 posix 的 fsync 衔接起来了。

select io 复用

之前设计的测试方案里,只有回环测试改动比较大。这里我们使用 select 这个高级的用法,监听是否有数据。

用这种方式,我们可以同时监听多个串口设备了。或者说,一个线程“同时”读多个串口设备。

termios

开启了 posix ,串口设备修改波特率、数据位等需要使用 termios。这部分的问题留待下一篇 libmodbus 部分详说。

总结

启用了 posix 后我们发现,posix 是在原来的设备驱动框架基础上套的一层壳。增加了函数调用跳转次数。如果没有必要的理由,还是不启用 posix 了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++语言
    +关注

    关注

    0

    文章

    147

    浏览量

    7323
  • Posix
    +关注

    关注

    0

    文章

    36

    浏览量

    9903
  • RT-Thread
    +关注

    关注

    32

    文章

    1427

    浏览量

    42181
  • DFS
    DFS
    +关注

    关注

    0

    文章

    26

    浏览量

    9417
  • FreeModbus
    +关注

    关注

    0

    文章

    17

    浏览量

    4799
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    rt-thread 驱动篇(六)serialX弊端及解决方法

    serialX 作为一个非阻塞串口驱动框架,在遇到一些异常时,需要做一些特殊处理,今天,笔者带大家来扒一扒 serialX 使用过程中需要注意哪些问题。
    的头像 发表于 06-20 11:43 ?4133次阅读

    请问rtthread的外设驱动为什么不实现posix接口

    外设驱动想支持posix接口,如select\\poll、read、write、ioctl,希望能支持异步通知、轮询、batch设置功能。但是rtthread在通过
    发表于 07-15 06:34

    在RT-Thread中使用POSIX Threads接口

    POSIX Threads简称Pthreads,POSIX是"Portable Operating System Interface"(可移植操作系统接口) 的缩写,POSIX
    发表于 08-12 15:02

    尝试一下在freemodbus里使用serialX

    接口中的每一个函数的功能。完全按照每一个函数功能定义去做,后面的事情就是水到渠成的。花了小半天的时间从 drv_uart.c 改成 drv_uartX.c 。然后使用 serialX 中提供的 测试
    发表于 02-13 15:09

    测试serialXposix支持详解

    看看有什么问题,然后发现困难重重,于是退而求其次,先测试 serialXposix 接口测试环境开发板: NK-980IOT V1.
    发表于 02-14 11:29

    浅析基于serialX串口驱动移植libmodbus

    详细比对,libmodbus 打开串口设备后使用 termios 配置串口设备的波特率数据位等。而笔者上次在测试 posix 接口时使用的默认配置,并没有修改波特率。为了验证并跟踪问题位置,笔者在
    发表于 02-15 11:07

    嵌入式软件使用POSIX接口的优缺点

    POSIX既然是可移植操作系统接口,那基于该接口的应用程序可移植性自然是很高的。基于POSIX接口设计的应用程序可以在不做修改或仅做极少量的
    发表于 11-14 08:45 ?5976次阅读

    posix是什么

    POSIX表示可移植操作系统接口POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为
    发表于 11-14 15:09 ?1.1w次阅读
    <b class='flag-5'>posix</b>是什么

    Linux信号量(2):POSIX 信号量

    存储)置于可选部分中。在 SUSv4 之前,POSIX 信号量接口已经被包含在信号量选项中。在 SUSv4 中,这些接口被移至了基本规范,而消息队列和共享存储接口依然是可选的。
    的头像 发表于 10-29 17:34 ?976次阅读

    RT-Thread 4.1.0中POSIX渊源介绍

    可移植操作系统接口POSIX 标准定义了操作系统(很多时候针对的是类 Unix 操作系统)应该为应用程序提供的接口标准,从而保证了应用程序在源码层次的可移植性,如今主流的 Linux 系统都做
    的头像 发表于 04-27 10:22 ?2302次阅读

    RT-Thread 大会:POSIX简介和使用

    可移植操作系统接口POSIX标准定义了操作系统(很多时候针对的是类Unix操作系统)应该为应用程序提供的接口标准,从而保证了应用程序在源码层次的可移植性。如今主流的Linux系统都做到了兼容
    的头像 发表于 05-27 16:27 ?2167次阅读
    RT-Thread 大会:<b class='flag-5'>POSIX</b>简介和使用

    rt-thread 驱动篇(五)serialX 小试牛刀

    终于来到了 serialX 的实践篇,期待很久了。
    的头像 发表于 06-16 11:29 ?5182次阅读
    rt-thread 驱动篇(五)<b class='flag-5'>serialX</b> 小试牛刀

    基于serialX串口驱动移植libmodbus的步骤

    之前,笔者介绍 serialX 的时候,曾详细的讲解过 struct rt_uart_ops 接口中的每一个函数的功能。完全按照每一个函数功能定义去做,后面的事情就是水到渠成的。
    发表于 08-10 15:25 ?1076次阅读

    基于serialX串口驱动移植freemodbus

    之前,笔者写过多篇 serialX 的文章,已经把它的原理和理念完完全全明明白白讲了,包括它的优势以及使用它需要注意的方面和可能遇到的问题。
    的头像 发表于 10-13 14:54 ?1262次阅读

    POSIX适合对象存储吗?

    最近,留意到 MinIO 官方博客的一篇题为“在对象存储上实现 POSIX 访问接口是坏主意[1]”的文章,作者以 S3FS-FUSE 为例分享了通过 POSIX 方式访问 MinIO 中的数据时碰到了性能方面的困难,性能远不如
    的头像 发表于 10-29 10:19 ?948次阅读
    <b class='flag-5'>POSIX</b>适合对象存储吗?
    喝什么可以减肥瘦肚子 外伤用什么消炎药 kgs是什么单位 大脖子病有什么症状 皮肤变黄是什么原因
    纳豆激酶有什么作用 什么是低烧 颔是什么部位 屈原是什么诗人 art是什么
    胃功能三项检查是什么 宽宽的什么填空 为什么来月经会头疼 备孕男性吃什么精子强 精液什么颜色
    奶霜是什么 致爱是什么意思 烂尾楼是什么意思 1990属马佩戴什么最佳 痔疮吃什么消炎药最好
    灵芝孢子粉有什么功效hcv9jop5ns4r.cn cta是什么意思dajiketang.com 河粉是什么做的zhongyiyatai.com 挑拨离间是什么意思clwhiglsz.com hb是什么意思shenchushe.com
    儿童包皮过长挂什么科hcv8jop4ns7r.cn 一般手脚慢进什么工厂hcv7jop9ns6r.cn 什么的口水hcv8jop4ns1r.cn 为什么会呕吐hcv8jop7ns9r.cn 荔枝和什么不能一起吃hcv8jop5ns4r.cn
    孙五行属什么hcv8jop7ns2r.cn 查过敏源挂什么科hcv7jop9ns6r.cn dvt是什么意思hcv8jop9ns1r.cn 逾越节是什么意思sscsqa.com 痰多吃什么好hcv7jop6ns5r.cn
    沈字五行属什么hcv8jop0ns1r.cn 今年24岁属什么生肖hcv9jop5ns4r.cn 羊水多是什么原因造成的hcv7jop9ns3r.cn 中耳炎去药店买什么药hcv7jop9ns3r.cn 什么叫牙齿根管治疗hcv9jop7ns4r.cn
    百度