中断处理中tasklet与工作队列的使用
来源:互联网 发布:js修改div样式 编辑:程序博客网 时间:2024/05/16 12:01
#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/interrupt.h>//define a devidstatic int mydev=1119;static int irq;static char* devname=NULL;//define arguments for this modulemodule_param(irq,int,0644);module_param(devname,charp,0644);//define a argument of tasklet structstatic struct tasklet_struct mytasklet;static void mytasklet_handler(unsigned long data){printk("This is tasklet handler..\n");}static irqreturn_t myirq_handler(int irq,void* dev){ static int count=0; if(count<10) { printk("-----------%d start--------------------------\n",count+1);printk("The interrupt handeler is working..\n");printk("The most of interrupt work will be done by following tasklet..\n");tasklet_init(&mytasklet,mytasklet_handler,0);tasklet_schedule(&mytasklet);printk("The top half has been done and bottom half will be processed..\n"); } count++;return IRQ_HANDLED;}static int __init mytasklet_init(){ //request a irq printk("My module is working..\n"); if(request_irq(irq,myirq_handler,IRQF_SHARED,devname,&irq)!=0) { printk("tasklet_init:can not request irq %d for %s.\n",irq,devname); return -1; } printk("%s request irq:%d success..\n",devname,irq); return 0;}static void __exit mytasklet_exit(){ printk("My module is leaving..\n"); free_irq(irq,&irq); printk("Free the irq %d..\n",irq);}module_init(mytasklet_init);module_exit(mytasklet_exit);MODULE_LICENSE("GPL");
再来一个work queue例子:
#include<linux/kernel.h>#include<linux/module.h>#include<linux/init.h>#include<linux/interrupt.h>#include<linux/workqueue.h> static int irq;static char *devname;static struct work_struct mywork;module_param(irq,int,0644);module_param(devname,charp,0644);struct myirq{ int devid;};struct myirq mydev={1119};static void mywork_handler(void *data){ printk("work is working\n");}static irqreturn_t myirq_handler(int irq,void *dev){ struct myirq mydev; static int count =0 ; mydev=*(struct myirq*)dev; printk("key:%d\n",count+1); printk("devid %d isr is working\n",mydev.devid); printk("botoom half will be working\n"); schedule_work(&mywork); printk("isr is leaving\n"); count++; return IRQ_HANDLED;}static int __init myirq_init(){ printk(KERN_NOTICE "MODULE is working...\n"); if(request_irq(irq,myirq_handler,IRQF_SHARED,devname,&mydev)!=0) { printk("%s request irq %d faild\n",devname,irq); return -1; } INIT_WORK(&mywork,mywork_handler); printk("%s request irq %d success \n",devname,irq); return 0;}static int __exit myirq_exit(){ printk("module is leaving\n"); free_irq(irq,&mydev); return 0;}module_init(myirq_init);module_exit(myirq_exit);MODULE_LICENSE("GPL");
- 中断处理中tasklet与工作队列的使用
- 中断后半段处理,tasklet使用机制与工作队列
- 软中断,tasklet和工作队列的区别与联系
- 软中断,tasklet和工作队列的区别与联系
- 软中断,tasklet和工作队列的区别与联系
- 软中断,tasklet和工作队列的区别与联系
- 软中断/tasklet/工作队列
- 软中断/tasklet/工作队列
- 软中断/tasklet/工作队列
- 软中断/tasklet/工作队列
- 软中断/tasklet/工作队列
- 软中断&tasklet&工作队列
- 软中断/tasklet/工作队列
- 软中断\tasklet\工作队列
- 软中断,tasklet,工作队列
- 中断处理的tasklet(小任务)机制和workqueue(工作队列)机制
- 中断处理的tasklet(小任务)机制和workqueue(工作队列)机制
- 中断处理的tasklet(小任务)机制和workqueue(工作队列)机制
- 如何删除存在于本机的sqlserver2005默认实例
- JS 对象
- cocos2d-x 数学函数、常用宏粗整理
- Unity 获取Terrain大小的方法
- defunct进程
- 中断处理中tasklet与工作队列的使用
- hdu 3635
- CentOS6.4+transmission-daemon
- hdu 4608 I-number 模拟
- application 使用
- JVM内存原理,weblogic内存的调优
- Android RelativeLayout 属性
- UITableView 详解 教程
- 压力大每天吃枣 协助分泌肾上腺皮质素