【问题标题】:What happens when a interrupt occurs in RTOS while currently in any task or another ISR?当 RTOS 当前处于任何任务或另一个 ISR 中时发生中断时会发生什么?
【发布时间】:2017-05-23 07:00:12
【问题描述】:

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

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

【问题讨论】:

  • 基于中断类型....主要取决于分配的中断级别和优先级。顺便说一句,您正在合并:RTOSinterrupts。您链接的问题有一个可接受的有效答案
  • 我的问题是在执行中断时发生中断时会发生什么???如果正在执行低优先级中断,则发生高优先级中断,@LPs 会发生什么

标签: c embedded rtos


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    但是你可以让NMINon Maskable Interrupt)优先于所有其他interrupts,并且不能被禁用。

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

    您可以考虑,例如,RTOS 实现:调度程序可以很容易地在其中断中使用 Timer 来开发。此中断必须具有较低的优先级并且不得停止其他interrupts(通常):此授权interrupts 尽快得到服务,而不考虑RTOS 调度程序的上下文切换。

    【讨论】:

      【解决方案3】:

      问题是

      如果当前处于任何任务或其他 ISR 中的 RTOS 发生中断,会发生什么情况?

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

      1. 根据允许的情况,它将充当正常中断。这个问题的问题是“发生了什么”有点宽泛——一些 RTOS 确实在幕后通过中断工作。所以,问题是问题不够具体。

      2. 关于任务的“发生的事情”是关于任务没有发生任何事情。中断就是中断,与任务的关系取决于编程。由于我不会读心术,所以问题不够具体。

      最佳答案是 42 (HHGTTG)

      【讨论】:

        【解决方案4】:

        没有一个答案,有时低优先级的中断继续完成,有时什么都没有发生,有时越高的中断越低。它首先取决于芯片/系统设计,其次取决于整个 RTOS 和应用程序人员的各个程序员。

        或者换一种说法,发生的事情就是那些个人希望在他们的设计和实施中发生的事情。

        【讨论】:

          猜你喜欢
          • 2014-07-30
          • 2015-04-21
          • 1970-01-01
          • 2016-01-27
          • 2011-02-23
          • 2022-11-26
          • 2019-12-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多