1.1.中断服务程序
实时系统中硬件中断处理是至关重要的,因为它是以中断方式通知系统外部事件的发生。为了快速响应中断,中断服务程序ISR运行在特定的空间,不同于其它任何任务,因此中断处理没有任务的上下文切换。
中断函数:
intConnect() 将C函数和中断向量联结
intCount() 得到当前中断套叠深度
intLevelSet() 设置程序中断级别
intLock() 使中断禁止
intUnlock() 开中断
intVecSet() 设置异常向量
intVecGet() 得到异常向量
所有的中断服务程序使用同一中断堆栈,它在系统启动时就已根据具体的配置参数进行了分配和初始化,必须保证它的大小,以使它能满足最坏的多中断情况。中断也有缺陷:ISR不运行在常规的任务上下文,它没有任务控制块。对于ISR的基本约束就是它们不能激活那些可能使调用程序阻塞的函数,例如,它不能获取信号量,因如果该信号量不可利用,内核会试图让调用者切换到悬置态。然而,ISR能给出信号量。
一个ISR通常与一个或多个任务进行通信,有直接的也有间接的作为输入输出事务的一部分。这种通信的本质是驱动任务执行,从而处理中断和各种情况。这与任务到任务的通信和同步基本相同,但是有两点不同:
? 一个ISR通常作为通信或同步的发起者,它通常返回一个信号量、向队列发送一个信息包或事件给一个任务。ISR很少作为信息的接收者,它不可以等待接收信息包或事件。
? ISR内的系统调用总是立即返回ISR本身。例如,即使ISR通过发送信息包唤醒了一个很高优先级的任务,它也首先必须返回ISR。这是因为ISR必须先完成。