Android深度探索:HAL与驱动开发学习笔记--工作队列

经验说:
工作队列使用上和 tasklet最大的不同是工作队列的函数可以使用休眠,而tasklet的函数是不允许使用休眠的。

工作队列一般用来做滞后的工作,比如在中断里面要做很多事,但是比较耗时,这时就可以把耗时的工作放到等待队列。就是系统延时调度的一个自定义函数。

在2.6.20之后的版本,这INIT_WORK(struct work_struct *work, void (*function)(void *), void *data)改为现在的两个参数,最后的那个data参数不带


了。data数据直接进入一个包含work_struct的自己定义的结构体了。
struct my_work_stuct{  
   int test;  
   struct work_stuct save;  
};  

使用步骤:
1、定义struct my_work_stuct irq_queue;
2、初始化INIT_WORK(&iirq_queue.save,do_irq_queuework);
3、调用方法:schedule_work(&irq_queue);
注,调用完毕后系统会释放此函数,所以如果想再次执行的话,就再次调用schedule_work()即可。
另外,内核必须挂载文件系统才可以使用工作队列。我的理解是:工作队列也属于调度,如果内核挂了,他就不调度了,当然就不能用工作队列了。

  工作队列的使用又分两种情况,一种是利用系统共享的工作队列来添加自己的工作,这种情况处理函数不能消耗太多时间,这样会影响共享队列中其他任务的处
理;另外一种是创建自己的工作队列并添加工作。


  (一)利用系统共享的工作队列添加工作:


    第一步:编写一个工作队列结构体,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值