美文网首页
中断服务函数能不能带形参和返回值?

中断服务函数能不能带形参和返回值?

作者: 夏天的雪花雨 | 来源:发表于2017-12-13 12:00 被阅读0次

概述

从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行中断处理。

(1) 硬中断

由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。

(2) 软中断

为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。

(3) 中断嵌套

Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。

(4) 软中断指令

int是软中断指令。

中断向量表是中断号和中断处理函数地址的对应表。

int n - 触发软中断n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。

(5)硬中断和软中断的区别

软中断是执行中断指令产生的,而硬中断是由外设引发的。

硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。

硬中断是可屏蔽的,软中断不可屏蔽。

硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。

软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。

当比如单片机这种没有操作系统的,中断处理函数不能有输入参数也不能有函数返回。因为中断都是些硬件自动调用,没有程序去给他传递参数,也没有硬件去接收参数。 那其它函数怎么传参数给它呢?一般都是通过全局变量方式。不过为了避免中断函数重入,我们可以在进入中断服务函数之后将中断关闭,处理完后再开中断。

不过x86计算机的软中断和硬件中断时可以有参数传递,有专门程序去给它传递参数。

(1) 注册中断处理函数

注册中断处理函数:

/**  * irq: 要分配的中断号  * handler: 要注册的中断处理函数  * flags: 标志(一般为0)  * name: 设备名(dev->name)  * dev: 设备(struct net_device *dev),作为中断处理函数的参数  * 成功返回0  */ int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,      const char *name, void *dev);

中断处理函数本身:

typedefirqreturn_t (*irq_handler_t) (int,void*);

/**

* enum irqreturn

* @IRQ_NONE: interrupt was not from this device

* @IRQ_HANDLED: interrupt was handled by this device

* @IRQ_WAKE_THREAD: handler requests to wake the handler thread

*/

enumirqreturn {

IRQ_NONE,

IRQ_HANDLED,

IRQ_WAKE_THREAD,

};

typedefenumirqreturn irqreturn_t;

#define IRQ_RETVAL(x) ((x) != IRQ_NONE)

所以中断服务函数带不带形参和返回值主要是看中断是发生在裸机上还是实时系统中。

http://blog.csdn.net/xy010902100449/article/details/49247527

相关文章

  • 中断服务函数能不能带形参和返回值?

    概述 从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。如...

  • swift函数基础知识

    1、函数声明和调用 通用函数声明格式:func 函数名称(形参名:形参类型,形参名:形参类型,···)->返回值类...

  • 08.手撕Go语言-函数

    函数包含函数名、行参列表、函数体和返回值列表,使用func进行声明,函数无参数或返回值时则形参列表和返回值列表省略...

  • C/C++ 主函数对比

    main函数 返回值 形参

  • Swift-函数基础

    一、函数 1、定义 1、声明:func 函数名(形参名:形参类型,形参名:形参类型)-> 返回值类型 2、调用:函...

  • go 入门(二)2018-07-19

    函数 函数的形参类型放在参数后边,函数的返回值类型写在形参的后边,void不写 多值返回 命名返回值return可...

  • go 函数注意及细节

    1、函数形参和返回值可以有多个2、形参列表和返回值的数据类型可以是值类型也可以是引用类型(map,切片)3、函数的...

  • C语言(四)函数

    函数: 1、函数的定义 2、形参、实参 3、函数的公式 4、无参无返回值 函数函数的调用 5、无参有返回值 函数函...

  • C++第5天:第84课-第94课

    引用 引用初始化 引用函数形参 引用函数返回值 引用 const不可更改形参

  • 27 JS函数

    四种方式定义函数 1 具名函数 function 函数名(形参1,形参2){ 语句 return 返回值} 2 匿...

网友评论

      本文标题:中断服务函数能不能带形参和返回值?

      本文链接:https://www.haomeiwen.com/subject/lbeaixtx.html