设为首页 加入收藏

TOP

Linux中断编程
2014-11-24 11:52:50 来源: 作者: 【 】 浏览:1
Tags:Linux 中断 编程

Linux实现底半部机制主要有tasklet,工作队列和软中断。


1.tasklet


tasklet的使用较简单,我们只需要定义tasklet及其处理函数并将两者关联。使用模版如下:


/*定义tasklet和底半部函数并关联*/


void xxx_do_tasklet(unsigned long);


DECLARE_TASKLET(xxx_tasklet,xxx_do_tasklet,0);


/*中断处理底半部*/


void xxx_do_tasklet(unsigned long)


{


........


}


/*中断处理顶半部*/


irqreturn_t xxx_interrupt(int irq,void *dev_id)


{


..........


tasklet_schedule(&xxx_tasklet);


...........


return IRQ_HANDLED;


}


/*设备驱动模块加载函数*/


int __init xxx_init(void)


{


.......


/*申请中断*/


result = request_irq(xxx_irq,xxx_intertupt,IRQF_DISABLED,"xxx",NULL);


.........


}


/*设备驱动卸载模块函数*/


void __exit xxx_exit(void)


{


.........


/*释放中断*/


free_irq(xxx_irq,xxx_interrupt);


...........


}


2.工作队列使用模板


/*定义工作队列和关联函数*/


struct work_struct xxx_wq;


void xxx_do_work(unsigned long);


/*中断处理底部*/


void xxx_do_work(unsigned long)


{


...............


}


/*中断处理顶半部*/


irqreturn_t xxx_interrupt(int irq,void *dev_id)


{


..........


schedule_work(&xxx_wq);


...........


return IRQ_HANDLED;


}


/*设备驱动模块加载函数*/


int __init xxx_init(void)


{


.......


/*申请中断*/


result = request_irq(xxx_irq,xxx_intertupt,IRQF_DISABLED,"xxx",NULL);


.........


/*初始化工作队列*/


INIT_WORK(&xxx_wq,(void(*)(void *)) xxx_do_work,NULL);


.........


}


/*设备驱动卸载模块函数*/


void __exit xxx_exit(void)


{


.........


/*释放中断*/


free_irq(xxx_irq,xxx_interrupt);


...........


}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇细说Activity的singleTask加载模式 下一篇Android文字显示效果研究

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)