处理中断的功能(中断服务程序:ISR)被细分为两类ISR:
一类ISR: ISR不使用操作系统服务(有些系统服务需要启用和禁用中断)。ISR结束后,处理会在中断发生的指令处继续进行,即中断对任务管理没有影响。这类ISR的开销最小;
二类ISR:OSEK操作系统提供一个ISR框架,为专用用户例程准备一个运行时环境。在系统生成期间,用户例程被分配给中断。
在中断服务例程中,OSEK操作系统服务的使用受到限制,如下图。
为了确保task按照OSEK调度点执行,可能会对所有类别的ISRs的中断优先级规定限制或在配置时执行检查。
中断优先级的最大数目取决于所使用的控制器以及实现,中断的调度是依赖于硬件的,在OSEK中没有指定。中断由硬件调度,而task由调度器调度。
中断可以中断任务(可抢占任务和不可抢占任务),如果一个task从中断例程被激活,那么该任务在所有活动中断例程结束后被调度。
快速禁用/启用api函数
OSEK提供了禁用所有中断的快速功能,以及禁用所有2类ISR。
典型的用法是保护短的临界段。它不允许从这样的受保护的关键段的中断中返回,即“suspend/disable”必须有一个匹配的“resume/enable”。
Suspend-和Resume-对之间唯一允许的操作系统服务调用是SuspendAllInterrupts/ ResumeOSInterrupts -pairs 或 SuspendAllInterrupts/ ResumeAllInterrupts -pairs。