linux驱动之等待队列

来源:互联网 发布:淘宝网书籍杂志在哪找 编辑:程序博客网 时间:2024/05/17 01:42

linux驱动中,等待某种的事件发生的工作最好不要使用不断循环来完成,而是采用另外一种方法,休眠与唤醒。

等待队列工作过程就是睡眠和唤醒的过程

睡眠和唤醒的过程的基本原理,当驱动程序等待事件发生时候进入休眠状态,当该事件发生后,就会唤醒休眠状态的驱动代码。

使用:


static DECLARE_WAIT_QUEUE_HEAD(button_waitq);     //定义初始化等待队列头
wake_up_interruptible(&button_waitq);              //唤醒  发出
wait_event_interruptible(button_waitq, ev_press);  // 等待事件 从阻塞中脱离ev_press是条件  若为真就不阻塞


例子:
如果读写设备文件的动作函数是dev_read()和dev_write(),在读之前一定要写入数据。

代码如下:


static DECLARE_WAIT_QUEUE_HEAD(button_waitq);//定义初始化
static sszie_t dev_read()
{
 // flag=1 代表写入数据,0表示没写入
wait_event_interruptible(button_waitq, flag);
 ......//处理业务逻辑代码


}
static  ssize_t dev_write()
{
.....//处理业务逻辑代码
flag=1;
wake_up_interruptible(&button_waitq);


}
0 0
原创粉丝点击