linux驱动之等待队列
linux驱动中,等待某种的事件发生的工作最好不要使用不断循环来完成,而是采用另外一种方法,休眠与唤醒。
等待队列工作过程就是睡眠和唤醒的过程
睡眠和唤醒的过程的基本原理,当驱动程序等待事件发生时候进入休眠状态,当该事件发生后,就会唤醒休眠状态的驱动代码。使用:
wake_up_interruptible(&button_waitq); //唤醒 发出
wait_event_interruptible(button_waitq, ev_press); // 等待事件 从阻塞中脱离ev_press是条件 若为真就不阻塞
例子:
如果读写设备文件的动作函数是dev_read()和dev_write(),在读之前一定要写入数据。
代码如下:
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);
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。