Skip to content

Latest commit

 

History

History
11 lines (6 loc) · 1.24 KB

15_定时器中断累计误差问题.md

File metadata and controls

11 lines (6 loc) · 1.24 KB

定时器中断累计误差问题

以一个自动重装载的定时周期为 1ms 的定时器为例,如果在其发生中断的时候,中断正好被关闭了,那么定时器中断会在下次系统中断被打开之后发生。那么这种情况是否会造成累计误差呢?也就是说会不会造成以后每次的中断都向后偏移呢?

由于定时器是自动重装载的,当其中断被触发后,将会在中断控制器的相应寄存器位置位,此时如果系统中断没有被打开,那么此中断就被 pending 直到中断重新被打开。于此同时,定时器已经开始了第二次的计数,也就是说,无论中断处理函数是否被执行,定时器都会重新开始计时,开始在指定时间触发下次中断。

但是如果中断关闭的时间超过了定时周期 1ms,那么就会出现丢中断的情况,即连续尝试触发两次中断,但是不会叠加在中断控制器的使能位上,而是只会在系统中断开启后执行一次中断处理函数,这种情况会导致系统工作异常。

结论

自动重装载定时器的中断处理函数被短暂延误,并不会出现累计误差,但是要注意,关闭中断时间太长,可能会导致丢中断的情况。