tasklet使用方法

本文详细介绍了在驱动程序中使用tasklet的过程,包括静态定义、使能、调度及注销等步骤,提供了具体实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tasklet的概念我这里就不多讲了,因为网上的文章很多,我这里只介绍怎么在我们的驱动程序中使用tasklet提供的接口函数。一般,从定义到最后注销,一共有4步,下面我们分别介绍这4个接口函数。

静态定义tasklet

static void my_tasklet_func(unsigned long data);

DECLARE_TASKLET_DISABLED(tasklet, my_tasklet_func, 0);

其中

#define DECLARE_TASKLET_DISABLED(name, func, data) \ 
struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data }

当然也可以像下面这么定义,

#define DECLARE_TASKLET(name, func, data) \ 
struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data }

这两个宏都可以静态定义一个struct tasklet_struct的变量,只不过初始化后的tasklet一个是处于eable状态,一个处于disable状态的。当然,也可以动态分配tasklet,然后调用tasklet_init来初始化该tasklet。


使能tasklet并传递参数

tasklet_enable(&tasklet); //因为定义的时候使用的是DECLARE_TASKLET_DISABLED,所以需要在初始化函数(可以是.probe)时使能它
tasklet.data = (unsigned long)my_data; //如果需要在调用my_tasklet_func时,传递参数,可以这么做

调度tasklet

tasklet_schedule(&tasklet);  //这个就是调度我们的tasklet(可以在中断handler,也就是top half中调用)

注销掉tasklet

tasklet_disable(&tasklet);
tasklet_kill(&tasklet);

一般就在驱动的.remove函数
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值