serialX的posix接口测试

测试环境
开发板: 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 flags & o_nonblock) { size = -eagain; break; } rt_wqueue_wait(&(device- >wait_queue), 0, rt_waiting_forever); }}while (size data;
return rt_device_flush(device);
}
瞧,serialx 的 flush 和 dfs 的 flush 以及 posix 的 fsync 衔接起来了。
select io 复用
之前设计的测试方案里,只有回环测试改动比较大。这里我们使用 select 这个高级的用法,监听是否有数据。
用这种方式,我们可以同时监听多个串口设备了。或者说,一个线程“同时”读多个串口设备。
termios
开启了 posix ,串口设备修改波特率、数据位等需要使用 termios。这部分的问题留待下一篇 libmodbus 部分详说。
总结
启用了 posix 后我们发现,posix 是在原来的设备驱动框架基础上套的一层壳。增加了函数调用跳转次数。如果没有必要的理由,还是不启用 posix 了。

三维激光扫描技术原理
我国未来四年将建成150座大规模集中充电桩,38万个充电桩
新鲜出炉BAT最新股价,阿里腾讯微跌,百度大涨,发展空间巨大但仍不及人间的零头
Kria KV260超长干货之开箱指南
现制现售水在线监管解决小区饮水机监管问题
serialX的posix接口测试
智慧灯杆传感器介绍
基于智能接口芯片SPC3实现ZJ16E卷接机组电控系统的设计
【开源项目】手把手教你用全志XR32芯片DIY一个自己的开发板
VR线下娱乐在日本发展的理由,VR ZONE的诞生和发展
dfrobotmicro:bit掌控I/O扩展板简介
一例多控开关的接线图分享
在电子产品越来越薄今天,OLED显示屏的OLED墙纸电视,或即将走进我们的生活
小米MIX Alpha环绕屏手机曝光搭载骁龙855平台辅以12GB+512GB内存组合
RFID技术现在处于怎样的发展水平
展讯推出14纳米8核64位中高端LTE芯片平台SC9861G-IA
专家云集,OpenHarmony技术峰会“OS内核及视窗分论坛”成功举办
【解决方案】安科瑞电力监控系统在上海现代摩比斯汽车零部件有限公司的设计与应用
分析各业界巨头对NVIDIA收购ARM的态度
国内3D打印市场前景广阔