gpt4 book ai didi

ARM GIC 中断饥饿

转载 作者:行者123 更新时间:2023-12-04 21:18:46 28 4
gpt4 key购买 nike

不知道有没有类似的问题。我试着回读但找不到任何东西,所以就在这里。

在我使用 ARM Cortex-A9(带 GIC 的双核)的裸机应用程序中,一些中断源是 4 个 FPGA 中断(假设 IRQ ID 58、59、60、61)具有相同的优先级和这个想法是在运行时同时连续触发。我可以说中断处理程序可能符合条件,但不会很长。

所有中断都会触发并被 GIC 检测到,并且都被标记为 PENDING。问题是,只有两个 ID 较高的中断 (58、59) 被 CPU 处理,其他两个中断。一旦完成 58 或 59,它们的源将再次触发并一遍又一遍地抢占 CPU。我的其他中断无限期地被饿死。

我试过优先级,将更高的中断分配给 60 和 61。果然,60 和 61 被触发并由 CPU 处理,但 58 和 59 却饿死了。所以这真的是一个饥饿的问题。

有什么办法可以解决这个问题,这样其他两个仍会根据其触发率进行处理?

最佳答案

假设 GIC 实现是 ARM 的设计之一,那么相同优先级的多个中断的仲裁方案固定为“调度编号最低的一个”,因此如果您希望它可以更改为某种轮次-罗宾方案你可能运气不好。

就是说,如果这些中断或多或少是永久断言的,并且您正在背靠背使用它们,那么这表明您可能不需要使用中断,或者至少是您的代码设计是不合适的。根据任务的确切性质,我会考虑以下一些想法:

  • 只需运行一个连续的轮询循环,依次循环遍历每个设备。如果有 期间每个设备可能不需要服务并且不容易分辨,请保留一个简单的中断处理程序,它只是自动设置标志/序列号/等。通知循环谁准备好了。
  • 在一个内核上处理所有中断,在另一个内核上进行实际处理。处理程序只是抓取必要的数据,将其塞入队列,并尽快返回,而另一个人只是稳定地咀嚼队列。
  • 如果捕获每个中断不如平均地“足够”地处理每个中断重要,那么在处理完每个中断后,让每个中断都处于禁用状态以获得适当的超时时间。或者,通过一次只启用一个来破坏您自己的循环调度,并且处理程序重新启用下一个中断而不是刚刚发生的中断。

关于ARM GIC 中断饥饿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37248685/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com