VxWorks操作系统指南(1.6) 中断服务程序

王朝other·作者佚名  2006-01-31
宽屏版  字体: |||超大  

1.1.中断服务程序

实时系统中硬件中断处理是至关重要的,因为它是以中断方式通知系统外部事件的发生。为了快速响应中断,中断服务程序ISR运行在特定的空间,不同于其它任何任务,因此中断处理没有任务的上下文切换。

中断函数:

intConnect() 将C函数和中断向量联结

intCount() 得到当前中断套叠深度

intLevelSet() 设置程序中断级别

intLock() 使中断禁止

intUnlock() 开中断

intVecSet() 设置异常向量

intVecGet() 得到异常向量

所有的中断服务程序使用同一中断堆栈,它在系统启动时就已根据具体的配置参数进行了分配和初始化,必须保证它的大小,以使它能满足最坏的多中断情况。中断也有缺陷:ISR不运行在常规的任务上下文,它没有任务控制块。对于ISR的基本约束就是它们不能激活那些可能使调用程序阻塞的函数,例如,它不能获取信号量,因如果该信号量不可利用,内核会试图让调用者切换到悬置态。然而,ISR能给出信号量。

一个ISR通常与一个或多个任务进行通信,有直接的也有间接的作为输入输出事务的一部分。这种通信的本质是驱动任务执行,从而处理中断和各种情况。这与任务到任务的通信和同步基本相同,但是有两点不同:

? 一个ISR通常作为通信或同步的发起者,它通常返回一个信号量、向队列发送一个信息包或事件给一个任务。ISR很少作为信息的接收者,它不可以等待接收信息包或事件。

? ISR内的系统调用总是立即返回ISR本身。例如,即使ISR通过发送信息包唤醒了一个很高优先级的任务,它也首先必须返回ISR。这是因为ISR必须先完成。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有