中断处理函数
来源:互联网 发布:淘宝哪家茶叶店好 编辑:程序博客网 时间:2024/06/06 05:41
以下是一个统计中断时间间隔的中断服务程序:
irqreturn_t short_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
static long mytime=0;
static int i=0;
struct net_device *dev=(struct net_device *)dev_id;
if(i==0){
mytime=jiffies;
}
else if(i<20){
mytime =jiffies- mytime;
printk("Request on IRQ %d time %d/n",irq , mytime);
mytime=jiffies;
printk("Interrupt on %s -----%d /n",dev->name,dev->irq);
}
i++;
return IRQ_HANDLED;
}
这个函数实现的只是对两次发生中断的时间间隔的统计,时间单位是毫秒。
函数参数说明:
int irq :在这里很明显传递过来的是中断号
void *dev_id:这个传递来的是设备的id号,可以根据这个设备id号得到相应设备的数据结构,进而的到相应设备的信息和相关数据。
下面以提取网路数据为例来说明一下:
struct net_device *dev=( struct net_device *)dev_id; (这里的dev_id的值是注册中断的时候宏传递过来的,是注册中断函数的最后一个参数),在这之后就可以用dev->name; dev->irq;等得到网络设备的信息了,当然提取ip数据报还得进行一些其它的工作。
struct pt_regs *regs:它指向一个数据结构,此结构保存的是中断之前处理器的寄存器和状态,主要用在程序调试。
关于中断处理函数的返回值:中断程序的返回值是一个特殊类型—irqreturn_t。但是中断程序的返回值却只有两个—IRQ_NONE和IRQ_HANDLED。
以下是在linux/irqreturn.h中的内容:
#ifndef _LINUX_IRQRETURN_H
#define _LINUX_IRQRETURN_H
typedef int irqreturn_t;
#define IRQ_NONE (0)
#define IRQ_HANDLED (1)
#define IRQ_RETVAL(x) ((x) != 0) //这个宏只是返回0或非0
#endif
- 中断处理函数 asm
- 中断处理函数
- 中断处理函数
- 时钟中断处理函数
- 中断处理函数
- GPIO中断处理函数
- 中断函数和中断处理函数
- 中断处理函数的注意事项
- net_rx_action() -- 软中断处理函数
- Linux函数accept中断处理
- Java线程中断处理函数
- 中断处理函数的注意事项
- 中断处理函数的注意事项
- 中断处理程序中的关中断函数disable_irq和disable_irq_nosync
- linux中断子系统(一) - 注册系统中断处理函数
- linux中断子系统(二) - 注册用户中断处理函数
- Linux内核中断模块之中断处理函数描述
- stm32中中断名和中断处理函数名所在位置
- java 实现中缀表达式转为后缀表达式
- Android 自定义progressDialog实现
- volatile和final
- C++类型转化分析:强制转换->const_cast转换
- 适合IT人自学的6个视频网站、8个社区网站
- 中断处理函数
- HDU1068Girls and Boys(最大独立数)
- 【Lucene3.6.2入门系列】第05节_自定义停用词分词器和同义词分词器
- C++类型转化分析:动态态转换->dynamic_cast
- apache安装以及cocos2d-x的html5版本环境搭建
- android之android.intent.category.DEFAULT的用途和使用
- C++类型转化分析:静态转换->static_cast
- (总结)CentOS Linux下VNC Server远程桌面配置详解
- Maze zoj3652(bfs+记忆化+状态压缩)