首页 > 系统服务 > 详细

linux驱动之等待队列

时间:2015-05-28 14:10:44      阅读:242      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!