实现中断嵌套处理时,需要保护的现
实现中断嵌套处理 中断现场保护中,保护返回地址、程序状态字、堆栈指针是必需的,否则中断结束后将无法顺利返回。而保护通用寄存器的目的在于防止用户中断服务子程序使用其中的寄存器,造成对原有内容的覆盖而在中断返回后任务执行出错。 因此在中断里对通用寄存器的保护完全可以取决于中断服务子程序对通用寄存器的使用情况,仅仅保存中断服务子程序中所用到的有限的几个通用寄存器,而不必保存所有通用寄存器。以arm体系结构为例,在用户模式下可用的通用寄存器为R0~R12,R13用作堆栈指针、R14为返回地址、R15用作PC,如果在中断服务子程序中只用到R0~R12中的一小部分,则在中断到来时可以仅仅只保存通用...全部
实现中断嵌套处理 中断现场保护中,保护返回地址、程序状态字、堆栈指针是必需的,否则中断结束后将无法顺利返回。而保护通用寄存器的目的在于防止用户中断服务子程序使用其中的寄存器,造成对原有内容的覆盖而在中断返回后任务执行出错。
因此在中断里对通用寄存器的保护完全可以取决于中断服务子程序对通用寄存器的使用情况,仅仅保存中断服务子程序中所用到的有限的几个通用寄存器,而不必保存所有通用寄存器。以arm体系结构为例,在用户模式下可用的通用寄存器为R0~R12,R13用作堆栈指针、R14为返回地址、R15用作PC,如果在中断服务子程序中只用到R0~R12中的一小部分,则在中断到来时可以仅仅只保存通用存器中的这一小部分,从而能够减少访存时间,最终达到缩短中断响应提高中断实时性的目的。
在实际情况中,这种策略是具有可行性的。首先,每个中断服务子程序中所需要的通用寄存器是可知的。在使用汇编语言编写用户中断服务子程序时,所需要的通用寄存器由程序员控制,使用C语言则由编译器决定具体使用到哪几个通用寄存器。
其次,在现有的嵌入式操作系统中,往往要求中断服务子程序尽可能的短小,例如在Linux中,把中断服务子程序分成Bottom Half和Top Half。因此,在大多数中断服务子程序中并没有用到所保护的全部通用寄存器,造成对其余通用寄存器的多余保护。
收起