Embedded 如何避免嵌套中断系统中的中断饥饿?

Embedded 如何避免嵌套中断系统中的中断饥饿?,embedded,interrupt,scheduling,interrupt-handling,starvation,Embedded,Interrupt,Scheduling,Interrupt Handling,Starvation,我正在学习中断,无法理解当中断太多以至于CPU无法处理前台循环或完成现有中断时会发生什么。我通读了这篇文章,但并没有完全理解调度程序在中断太多的情况下会有什么帮助 如果中断不能被忽略,我们是否切换到更快的CPU?是的,您必须切换到更快的CPU! 您必须确保有足够的时间进行主循环。因此,让中断服务尽可能短并进行一些CPU工作负载测试是非常重要的。事实上,任何时候在共享资源上发生争用时,都有可能出现饥饿。本文讨论的调度器限制了中断速率,从而确保在每个间隔期间有一定的无中断处理时间。在高活动期间,中断

我正在学习中断,无法理解当中断太多以至于CPU无法处理前台循环或完成现有中断时会发生什么。我通读了这篇文章,但并没有完全理解调度程序在中断太多的情况下会有什么帮助


如果中断不能被忽略,我们是否切换到更快的CPU?

是的,您必须切换到更快的CPU!
您必须确保有足够的时间进行主循环。因此,让中断服务尽可能短并进行一些CPU工作负载测试是非常重要的。

事实上,任何时候在共享资源上发生争用时,都有可能出现饥饿。本文讨论的调度器限制了中断速率,从而确保在每个间隔期间有一定的无中断处理时间。在高活动期间,中断处理被禁用,调度程序切换到轮询模式,在轮询模式下,它定期询问中断请求行的状态,从而有效地限制中断流。操作系统力求在每个中断处理程序中尽可能少地执行任务——任务通常只是排队,以便稍后在不同的阶段处理它们。在任何调度算法中都有许多考虑因素和权衡。

总的来说,您需要了解程序的每个部分消耗了多少时间。这是很容易在实践中测量与示波器现场。如果您在输入时激活GPIO,在离开中断时取消激活GPIO,您不仅可以看到ISR占用了多少时间,还可以看到它启动的频率。如果你对每个ISR都这样做,你就会知道他们需要多少时间。然后可以在main()中执行类似的操作,以粗略估计程序的完整执行周期,即main+中断

至于最佳解决方案,显然是减少中断的数量。如果可能,使用轮询。使用DMA。使用硬件缓冲的串行外设(UART、CAN等),而不是中断密集型外设。使用硬件PWM代替输出比较定时器。等等当您为您的项目选择合适的MCU时,需要尽早考虑这些问题。如果您选择了错误的MCU,那么显然您必须进行更改。摆弄CPU时钟听起来像是权宜之计。让设计正确