Linux驱动编程----底半部机制(中断)

Linux内核中将中断响应的处理可以分为两部分:顶半部和底半部

    1,顶半部处理要紧且操作时间短的事件,如恢复相应的寄存器状态

    2,底半部处理操作时间长的事件

实现以上机制的两种:

1,tasklet

    使用模板如下:

/*声明底半部函数*/
void xxx_do_tasklet(unsigned long);
/*
此宏实际就是创建一个struct tasklet_struct xxx_tasklet结构体
并关联对于的底半部处理函数
*/
DECLARE_TASKLET(xxx_tasklet, xxx_do_tasklet, 0);

/*底半部处理函数*/
void xxx_do_tasklet(unsigned long)
{
	...
}
/*在中断处理函数中调度tasklet*/
irqreturn_t xxx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
	...
	tasklet_schedule(&xxx_tasklet);
	...
}
2,工作队列

    使用模板如下:

/*定义一个工作队列*/
struct work_struct my_wq; 

/*定义一个处理函数*/
void my_wq_func(unsigned long); 

/*初始化工作队列并将其与处理函数绑定*/
INIT_WORK(&my_wq, (void (*)(void *)) my_wq_func, NULL);

/*调度工作队列执行*/
schedule_work(&my_wq);



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值