7-4 POLL设备方法

系统调用(用户空间) 驱动(内核空间)

open open

close Release

read write

ioctl ioctl

lseek llseek

select poll

 

select系统调用:用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。

int select(maxfd, *reasfds, *writefds, *exceptfds, *timeout)

 

timeout:为0

不管是否有文件满足要求,都立即返回,无文件满足要求返回0,有文件满足要求返回一个正值。

timeout为NULL

select将阻塞进程,直到某个文件满足要求

timeout值为正整数

就是等待的最长时间,即select在timeout时间内阻塞进程。

 

 

返回值:

1、正常情况下返回满足要求的文件描述符个数

2、经过了timeout等待后仍无文件满足要去,返回值为0

3、如果select被某个信号中断,它将返回-1并设置errno为EINTR

4、如果出错,返回-1并设置相应的errno

 

 

使用方法:

1、将要监控的文件添加到文件描述符集

2、调用select开始监控

3、判断文件是否发生变化

 

 

poll方法

1、使用poll_wait将等待队列添加到poll_table中。

2、返回描述设备是否可读或可写的掩码。

掩码:

POLLIN 设备可读

POLLRDNORM 数据可读

POLLOUT 设备可写

POLLWRNORM 数据可写

 

 

poll只是做一个登记,真正阻塞发生在select.c 中的do_select

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Modbus RTU (Remote Terminal Unit) 是一种基于 ASCII 码的通信协议,广泛用于工业自动化设备之间的数据交换,如PLC(可编程逻辑控制器)和变频器等。以下是使用 Modbus RTU 进行通信的基本步骤: 1. **配置硬件接口**:首先,确保你的设备(如PLC)支持 Modbus RTU 并配置好串口或以太网接口。确定正确的波特率(通常为9600bps)、数据位数(8位)、停止位(1位)和校验方式(偶校验或无校验)。 2. **选择通信软件或库**:使用 Modbus RTU 的客户端库,如Python的`pymodbus`、Java的`modbus-rtu`等,或者专门的串口调试工具(如TLC5940 Modbus demo),这将负责发送和接收命令。 3. **初始化连接**:根据所选软件的文档,创建连接到设备的实例,并设置相应的参数,比如IP地址或串口号。 4. **发送请求**:使用 Modbus功能码指定你要执行的操作,如读取寄存器(0x03)或写入寄存器(0x06)。构建包含功能码、地址和数据的请求报文(如十六进制格式)。 5. **执行命令**:调用发送函数将请求发送出去,等待设备响应。对于读操作,你可能需要指定起始地址和数量;对于写操作,确认写入的数据已经正确。 6. **解析响应**:对于读取操作,从设备接收到的数据中提取你需要的信息。如果是写入响应,检查是否有错误码。 7. **处理错误**:检查响应中的错误代码,如无响应或非法请求,可能需要重试或者调整配置。 8. **断开连接**:完成数据交换后,记得关闭连接释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值