timer - 什么情况会导致定时器中断冲突/错过?

标签 timer embedded hardware interrupt rtos

我正在开发一个运行到完成状态机 RTOS。我想知道什么情况下会错过中断?最大 CPU 利用率条件 (100%) 会导致错过中断吗?另外,如果两个具有不同处理程序但相同中断线的计时器在同一滴答处超时,哪个 ISR 首先运行?

[感谢从软件/固件工程师的角度做出的答复,硬件知识有限。]

最佳答案

错过中断的典型方式是在同一中断源第二次出现之前未处理第一次出现的中断。如果您没有足够快地为第一个事件提供服务,那么您就会错过后续事件,因为无法将其与第一个事件区分开来。没有队列可以堆叠多次发生的中断,因此您需要在该特定中断再次发生之前服务并清除每个中断。 (请注意,不同的中断源可以同时处于待处理状态并单独提供服务,因为它们是可以区分的。同一中断源两次出现可能会导致您错过一个。)

100% CPU 利用率并不一定会导致错过中断,但我想它可能会有所贡献。它还可能会导致其他问题。

许多微 Controller 都包含中断优先级机制,该机制定义了哪些中断源将在哪些其他中断上被断言。这因微 Controller 而异,因此您必须检查特定微 Controller 的数据表以了解详细信息。

更新: 那么什么情况会导致中断服务速度不够快呢? 如果中断被禁用的时间太长,则中断服务的速度可能不够快。或者,如果较高优先级的中断处理程序花费太长时间,则可能无法足够快地处理较低优先级的中断。

为了避免这些情况,请缩短禁用中断的周期和中断处理程序例程。

关于timer - 什么情况会导致定时器中断冲突/错过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386441/

相关文章:

swift - 在标签中设置和动画化日期时间

ios - UIDatePicker 作为带秒数的倒数计时器(Swift)

c - 传递 'memcpy' 的参数 2 会丢弃来自指针目标类型的 'volatile' 限定符

c - 声明复杂 C 结构化常量数据的策略?

graphics - CPU 什么时候在 GPU 上等待?

php - 基于用户输入的计时器 PHP

c++ - 在 C++ 中优化空间而不是速度

tdd - 如何使用硬件进行 TDD

hardware - 用于特殊用途 3D 图形计算的 CUDA 或 FPGA?

由于多个进程导致的linux高分辨率posix定时器延迟