关注“嵌入式软件开发学习圈”免费获取更多学习教程
中断处理时间
虽然中断服务的处理时间应该尽可能的短,但是对处理时间并没有绝对的限制。如果中断服务是在任何给定的时间开始,且中断服务程序代码是应用程序中最重要的代码,则中断服务需要多长时间就应该给它多长时间。然而在大多数情况下,中断服务子程序应识别中断来源,从叫中断的设备取得数据或状态,并通知真正做该事件处理的那个任务。当然应该考虑到是否通知一个任务去做事件处理所花的时间比处理这个事件所花的时间还多。在中断服务中通知一个任务做时间处理(通过信号量、邮箱或消息队列)是需要一定时间的,如果事件处理需花的时间短于给一个任务发通知的时间,就应该考虑在中断服务子程序中做事件处理并在中断服务子程序中开中断,以允许优先级更高的中断打入并优先得到服务。
非屏蔽中断(NMI)
有时,中断服务必须来得尽可能地快,内核引起的延时变得不可忍受。在这种情况下可以使用非屏蔽中断,绝大多数微处理器有非屏蔽中断功能。通常非屏蔽中断留做紧急处理用,如断电时保存重要的信息。然而,如果应用程序没有这方面的要求,非屏蔽中断可用于时间要求最苛刻的中断服务。下列表达式给出如何确定中断延迟、中断响应时间和中断恢复时间。
中断延迟时间=指令执行时间中最长的那个时间+开始做非屏蔽中断服务的时间
中断响应时间=中断延迟时间+保存CPU寄存器花的时间
中断恢复时间=恢复CPU寄存器的时间+执行中断返回指令的时间。
在一项应用中,我将非屏蔽中断用于可能每150μS发生一次的中断。中断处理时间在80至125μS之间。所使用的内核的关中断时间是45μS。可以看出,如果使用可屏蔽中断的话,中断响应会推迟20μS。
在非屏蔽中断的中断服务子程序中,不能使用内核提供的服务,因为非屏蔽中断是关不掉的,故不能在非屏蔽中断处理中处理临界区代码。然而向非屏蔽中断传送参数或从非屏蔽中断获取参数还是可以进行的。参数的传递必须使用全程变量,全程变量的位数必须是一次读或写能完成的,即不应该是两个分离的字节,要两次读或写才能完成。
图2.21中断延迟、响应和恢复(不可剥夺型内核)
图2.22中断延迟、响应和恢复(可剥夺型内核)
非屏蔽中断可以用增加外部电路的方法禁止掉,如图2.23所示。假定中断源和非屏蔽中断都是正逻辑,用一个简单的“与”门插在中断源和微处理器的非屏蔽中断输入端之间。向输出口(Output Port)写0就将中断关了。不一定要以这种关中断方式来使用内核服务,但可以用这种方式在中断服务子程序和任务之间传递参数(大的、多字节的,一次读写不能完成的变量)。
图2.23非屏蔽中断的禁止
假定非屏蔽中断服务子程序每40次执行中有一次要给任务发信号,如果非屏蔽中断150μS执行一次,则每6mS(40*150μS)给任务发一次信号。在非屏蔽中断服务子程序中,不能使用内核服务给任务发信号,但可以使用如图2.24所示的中断机制。即用非屏蔽中断产生普通可屏蔽中断的机制。在这种情况下,非屏蔽中断通过某一输出口产生硬件中断(置输出口为有效电平)。由于非屏蔽中断服务通常具有最高的优先级,在非屏蔽中断服务过程中不允许中断嵌套,普通中断一直要等到非屏蔽中断服务子程序运行结束后才能被识别。在非屏蔽中断服务子程序完成以后,微处理器开始响应这个硬件中断。在这个中断服务子程序中,要清除中断源(置输出口为无效电平),然后用信号量去唤醒那个需要唤醒的任务。任务本身的运行时间和信号量的有效时间都接近6mS,实时性得到了满足。
图2.24非屏蔽中断产生普通可屏蔽中断
uCOS-II基础入门相关链接:
uCOS-II基础入门一介绍:实时系统概念、前后台系统、代码的临界段、任务切换。如需了解更多详情可以点击如下:
嵌入式学习之uCOS-II基础入门(一)
uCOS-II基础入门二介绍:内核概述、调度含义、不可剥夺型内核、可剥夺内核、可重入性的含义。如需了解更多详情可以点击如下:
嵌入式学习之uCOS-II基础入门(二)
uCOS-II基础入门三介绍:任务优先级、静态(动态)优先级、优先级反转、任务优先级分配。如需了解更多详情可以点击如下:
嵌入式学习之uCOS-II基础入门(三)
uCOS-II基础入门四介绍:资源共享时,互斥条件包括:关中断、使用测试并置位指令、禁止做任务切换、利用信号量。如需了解更多详情可以点击如下:
嵌入式学习之uCOS-II基础入门(四)
uCOS-II基础入门五介绍:死锁,同步,事件标记等概念。如需了解更多详情可以点击如下:
嵌入式学习之uCOS-II基础入门(五)
uCOS-II基础入门六介绍:消息邮箱,消息队列,中断延迟,中断响应等概念。如需了解更多详情可以点击如下:
嵌入式学习之uCOS-II基础入门(六)
最近和大家分享嵌入式学习之uCOS-II基础入门学习资料。
获取如下uCOS-II基础入门学习资料,关注分享微信公众号“嵌入式软件开发学习圈”,回复“uCOS-II基础入门学习资料”即可。
关注分享微信公众号“嵌入式软件开发学习圈”,获取更多学习资料、以及资讯。你们的关注是我最大动力。
|