×
嵌入式 > 技术百科 > 详情

关于中断服务函数带来返回值的思考

发布时间:2022-04-12 发布时间:
|

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


(1) 硬中断


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


(2) 软中断


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


(3) 中断嵌套


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


(4) 软中断指令


int是软中断指令。


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


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


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


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


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


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


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


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


注册中断处理函数


注册中断处理函数:


/**

 * irq: 要分配的中断号

 * handler: 要注册的中断处理函数

 * flags: 标志(一般为0)

 * name: 设备名(dev->name)

 * dev: 设备(struct net_device *dev),作为中断处理函数的参数

 * 成功返回0

 */


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

 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA及CPLD应用领域不断拓展