如果,你的定时器中断周期是5ms, 而你中断中需要处理的事件耗时需要超过5ms,那么,你这个设计是失败的!
你根本出不了中断,或者说,有出去这个动作,随后又进去了,那么,你还要中断程序干什么?直接写在 while(1)里面就好了。
你根本出不了中断,或者说,有出去这个动作,随后又进去了,那么,你还要中断程序干什么?直接写在 while(1)里面就好了。
中断执行程序要尽可能的短小精悍, 耗时过长的任务放在main主程序中执行. 5ms的中断程序还没执行完毕, 下一个5ms又来, 中断程序不可以被自己打断的.要等到执行完毕以后才能再次进入5ms的中断程序.中断抢占是要被更高一级的中断程序打断.
如果中断服务程序没有屏蔽定时器中断,并且下一个定时器中断的优先级不低于当前正在处理的中断,那么下一个定时器中断会打断当前的中断服务程序,并跳转到新的中断服务程序。这可能导致当前中断服务程序中的数据或状态被破坏,除非它已经被适当地保护起来。
When the processor is servicing the interrupt program, the first thing it does is to disable interrupts (this is automatic and it is done by the processor).
When you finish the interrupt and execute the "RETI" instruction (return from interrupt), this instruction automatically will return from interrupt and also it will reenable the interrupts (wich were disabled by the processor when it started executing this intrerrupt).
When you finish the interrupt and execute the "RETI" instruction (return from interrupt), this instruction automatically will return from interrupt and also it will reenable the interrupts (wich were disabled by the processor when it started executing this intrerrupt).
中断服务程序的执行时间:一旦定时器中断被触发,CPU会进入相应的中断服务程序。如果当前的中断服务程序执行时间过长,而下一个定时器中断的时间已经到达,那么CPU的行为将取决于中断优先级的设置。 如果当前中断的优先级高于下一个定时器中断的优先级,那么CPU将继续执行当前的中断服务程序,直到其完成。下一个定时器中断将被暂时挂起,等待当前中断处理完毕后再进行处理。 如果下一个定时器中断的优先级高于或等于当前中断的优先级,那么CPU可能会立即响应下一个定时器中断,中断当前的中断服务程序,转而执行新的中断服务程序。这可能会导致当前中断服务程序中的部分工作被打断,需要在新的中断服务程序执行完毕后,再由CPU决定是否继续执行之前被打断的中断服务程序。