当RTOS在当前任何任务或其他ISR中发生中断时会发生什么?

时间:2017-05-23 07:00:12

标签: c embedded rtos

我已经阅读了这个question,当一个中断执行时它不是一个有效的答案,它不会一直禁用所有其他中断。它基于中断类型(在某些情况下,我们需要在程序中手动完成)。

  

我的问题是在执行a时发生中断时会发生什么   打断 ???如果正在执行低优先级中断,则为高   优先级中断会发生什么?

4 个答案:

答案 0 :(得分:2)

这取决于系统。如果微控制器/中断控制器支持嵌套中断,并且应用程序启用该功能,则优先级较高的中断将中断较低优先级的中断。在这种情况下,当优先级较高的中断完成时,优先级较低的中断将恢复。但是,如果系统不支持嵌套中断,则当活动中断服务程序完成时,后续中断请求将挂起并进行服务。

答案 1 :(得分:1)

对于SO来说,它太宽泛了,我认为它是基于拱形的。

我试着给你一个简短的概述,期待一些DV。 ;)

主要是,如果arch允许嵌套interrupts,则执行跳转到高级别中断的ISR时,优先级较低的中断会被中断。

但是你可以{{1>}( N M 可疑 nterrupt)优先于所有其他{{1}并且无法禁用。

通常(我认为)所有的arch都有一个全局中断启用标志,因此必须启用它才能允许其他中断服务。也意味着ISR在执行时可以在其工作期间禁用其他中断。

例如,您可以考虑NMI实现:在中断期间使用Timer可以轻松开发调度程序。此中断必须具有较低的优先级,并且不得停止其他interrupts(通常):尽快为RTOS提供服务但不考虑interrupts调度程序的上下文切换。

答案 2 :(得分:1)

问题是

  

当RTOS当前在任何任务或其他ISR中发生中断时会发生什么?

我写了两个商业RTOS,没有满足所有标准的答案。但是,我可以像问题一样广泛回答:

  1. 根据允许的内容,它将充当正常中断。这个问题的问题在于“发生了什么”有点宽泛 - 一些RTOS在幕后工作时会中断。所以,问题是这个问题不够具体。

  2. 关于任务,“会发生什么”是关于任务的任何事情。中断是一个中断,与任务的关系取决于编程。由于我不再读心思,所以问题不够具体。

  3. 最佳答案是42(HHGTTG)

答案 3 :(得分:0)

没有一个答案,有时没有任何事情发生,较低的prio中断继续完成,有时较高的一个中断较低的。它首先取决于芯片/系统设计,其次取决于各个程序员全面的RTOS和应用程序人员。

或者另一种说法是,这些人希望在他们的设计和实施中发生什么。