本文分享自中移OneOS微信公众号《中断管理》。
中断是指计算机运行过程中,出现某些意外情况需及时处理时,CPU能自动停止正在运行的程序并转入处理意外情况的程序,处理完毕后又返回原被暂停的程序继续运行。中断是一种异常,正确地处理异常,避免错误发生是提高软件稳定性非常重要部分。
中断工作机制
中断向量表是所有中断处理程序的入口,一般是在地址空间的0地址,因为中断处理与芯片架构强相关,下文以Cortex-M系列来进行说明。
在Cortex-M内核上,所有中断都采用中断向量表的方式进行处理。当一个中断触发时,处理器能判定到是哪个中断源,然后查找中断向量表跳转到相应的位置进行处理。这就要求每个中断服务程序的地址指针必须挂接在统一的地址上,这个地址必须要设置到中断向量偏移寄存器中,默认是0x08000000。
中断处理过程
在操作系统中断管理中,将中断处理程序分为3个部分,中断前导程序、用户中断服务程序、中断后续程序。
中断前导程序
保存运行现场,不同CPU架构的实现方式有差异。对于Cortex-M来说,该工作由硬件自动完成,软件不需要处理,当一个中断触发时,处理器会自动将当前运行部分的上下文寄存器(PSR、PC、LR、R12、R3-R0)压入中断栈中。
调用os_interrupt_enter接口,该函数是将全局变量os_interrupt_nest加1,用它来实现中断嵌套的记录,代码如下所示:
v