码迷,mamicode.com
首页 > 系统相关 > 详细

linux驱动之等待队列

时间:2015-05-28 14:11:49      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

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);


}

linux驱动之等待队列

标签:

原文地址:http://blog.csdn.net/u012590688/article/details/46120529

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!