Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Linux中断编程

Linux实现底半部机制主要有tasklet,工作队列和软中断。1.tasklettasklet的使用较简单,我们只需要定义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);     ...........}