linux驱动之等待队列

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


}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。