10ms定时中断与中断嵌套的关系(只针对多线程OS)

        10ms定时中断的目的是执行线程切换,操作过程是:保存旧线程的状态,恢复新线程的状态。至于是否将这些状态保存到旧线程的栈上,则视情况而定。现在我们来分析,在可能出现中断嵌套的情况下,10ms定时中断如何完成线程切换。


        有一个链表,链表头是旧线程,链表尾是新线程,链表中间有多个独立中断、多个嵌套中断,被嵌套中断会在这个链表中的多个位置出现,独立中断只会在1个位置出现。10ms定时中断可能作为独立中断、也可能作为被嵌套中断出现。分如下2种情况讨论:

        (1)链表中只有多个独立中断;

        (2)链表中有大于等于1个的嵌套中断;


1.链表中只有多个独立中断的情况下,10ms定时中断如何实现线程切换?

        由于链表中只有独立中断,10ms定时中断也作为其中一员,它可能位于链表头部、中部、尾部。那么事实上,10ms定时中断可独立保存旧线程的状态、独立恢复新线程的状态,在恢复新线程的状态之后,其实已经切换到新线程了,但新线程却被立刻中断,所以又执行了一些中断之后,才最终切换为新线程。


2.链表中有大于等于1个的嵌套中断的情况下,10ms定时中断如何实现线程切换?

        此时10ms定时中断本身可能是独立中断,也可能是被嵌套中断。对于任何一个被嵌套的中断而言,在被嵌套之后,无论嵌套多少层,最后都会退回到被嵌套的代码处。所以无论10ms定时中断本身是独立中断,还是被嵌套中断,都无关紧要。重要的是,如果10ms定时中断位于某个最古老中断的嵌套中间环节(它可能被嵌套多次),由于之后会退回到这个中断,并由这个中断恢复先前保存的状态,因此在10ms定时中断更新线程切换信息后,应由这个中断使用更新后的线程切换信息来执行线程切换。此时这个操作为什么不能由10ms定时中断执行?原因是一旦由它执行,则前一个被嵌套中断的状态将被错误地恢复。另一种情况是,10ms定时中断不位于任何被嵌套中断的中间环节,此时无论10ms定时中断本身是独立中断,还是被嵌套中断,都应由它自己执行线程切换。两种情况下,只要切换完成,之后的任何中断,无论它是独立中断还是被嵌套中断,都可被当作是对新线程的中断。所以如果为了简单化,我们可将10ms定时中断的硬件优先级设为最低,使得只可能出现这里说的第2种情况。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在嵌入式MCU软件开发中,中断是非常重要的一种机制,可以有效地处理硬件外设的状态变化,提高系统响应速度和效率。在中断处理过程中,中断优先级和中断嵌套是需要考虑的两个重要问题。 中断优先级是指当多个中断同时发生时,系统按照一定的优先级顺序来处理这些中断。一般来说,系统有多个硬件外设,每个外设都会产生中断中断的优先级高低可以通过设置相应的寄存器来实现。在中断处理过程中,如果当前正在处理一个中断,而此时又有一个优先级更高的中断发生,系统会立即中断当前中断的处理,转而去处理优先级更高的中断,这就是中断优先级的作用。 中断嵌套是指在处理一个中断的过程中,又发生了另一个中断。这种情况下,系统需要先处理当前正在处理的中断,再去处理发生的新中断。为了实现中断嵌套,系统需要有一个中断嵌套的机制,一般来说,这个机制是通过设置一个中断屏蔽寄存器来实现的。当一个中断正在处理时,系统会将该中断的优先级设置为最高,然后将其他中断的优先级都设置为低于当前中断的优先级,这样可以保证当前中断处理完毕后,仍然按照优先级顺序来处理其他中断。 在实际的嵌入式MCU软件开发中,中断优先级和中断嵌套是需要根据具体应用场景来设置的。如果系统中有多个硬件外设,可以根据外设的性质和重要程度来设置中断优先级。如果系统需要支持中断嵌套,需要考虑中断处理的顺序和优先级,以保证系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值