Nucleus的中断分为管理的和非管理的中断。
管理中断:需要向操作系统注册该中断向量,中断产生后通过该中断向量注册的低级中断服务程序(LISR)来激活高级的中断服务程序(HISR)。
非管理中断:不需要通过操作系统进行管理,直接将中断服务程序挂到中断向量表上,上下文的保存与恢复都要用户自己来做,该中断自己不能嵌套,最好不要被管理的中断再次中断否则会引起堆栈出错,而且非管理的中断不能使用绝大多数的Nucleus系统调用,因为它可能会破坏操作系统某些保护的数据结构(当有线程在运行时)。
非管理的中断适用于那些比较频繁的中断,如果通过操作系统来管理这些中断的话,其上下文保存与恢复的时间就比较长,中断的实时性就不能满足要求。
Nucleus PLUS 通过把应用程序的 ISRs 区分为低级到高级组件来处理保护问题。
低级中断:低级中断服务子程序(LISR)和正常的 ISR 一样运行,包括使用当前堆栈。Nucleus PLUS 在调用 LISR 之前保存上下文,在 LISR 返回之后恢复上下文(上下文的保持都是由操作系统来完成的)。Nucleus PLUS 支持多个 LISRs 的嵌套。
LISR主要完成硬件中断的处理,及激活HISR。
高级中断:
1、高级中断支持动态创建和删除。每个 HISR 由它自己的堆栈空间和控制块。每个的内存由应用程序提供。高级中断一般都是由低级中断激活。
2、高级中断不允许自挂起。
3、高级中断分成3个优先级:0, 1, 2.。
4、高级中断直接是可以互相抢占的(在一个低优先级的 HISR 处理期间,如果一个更高优先等级的 HISR 被激活,低优先级的 HISR 以与任务抢先方式相同的方式抢先。)。
5、高级中断如果被同时触发多次,一个激活的计数器维护着每个 HISR。这个计数器用于确保每个 HISR 为每次激活运行一次。注意:一个已经激活的 HISR 的每次附加触发都通过连续调用 HISR 来处理。