linux 中断下半部 软中断tasklet

tasklet 是利用软中断来实现的另外一种下半部机制,在软中断和 tasklet 之间,建议大家使
用 tasklet。

在前面中断的基础上实现:

1.定义结构体变量:
struct tasklet_struct tasklet;

2.在中断初始化之后,初始化 tasklet:

 tasklet_init(要初始化的 tasklet,

                    tasklet 的处理函数,

                   要传递给 func 函数的参数);

3.在中断上半部执行tasklet_schedule:

tasklet_schedule(&dev->irqkey[0].tasklet(要调度的 tasklet));

4.调用key_tasklet回调函数,执行中断下半部
static void key_tasklet(unsigned long data)
{
    struct imx6uirq_dev *dev = (struct imx6uirq_dev*)data;

    dev->timer.data = data; //定时器参数
    mod_timer(&dev->timer, jiffies + msecs_to_jiffies(20)); /* 20ms定时 */

}

5.参考实例

tasklet 使用示例

/* 定义 taselet */
struct tasklet_struct testtasklet;

/* tasklet 处理函数 */
void testtasklet_func(unsigned long data)
{
	/* tasklet 具体处理内容 */
}

/* 中断处理函数 */
irqreturn_t test_handler(int irq, void *dev_id)
{
	......
	/* 调度 tasklet */
	tasklet_schedule(&testtasklet);
	......
}

/* 驱动入口函数 */
static int __init xxxx_init(void)
{
	......
	/* 初始化 tasklet */
	tasklet_init(&testtasklet, testtasklet_func, data);
	
	/* 注册中断处理函数 */
	request_irq(xxx_irq, test_handler, 0, "xxx", &xxx_dev);
	......
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值