马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
等待ADC中断继续执行直到弹栈前”。 这句红色的话意思是说,在上面情况下,UART中断请求等待EOC中断运行到执行POP之前的时刻就可得到响应而去执行UART RX中断服务程序,并不急着执行EOC中断的POP弹栈动作,随之的UART中断服务程序也无需压栈操作,UART中断程序执行完毕后再回来做弹栈动作,然后回到主循环的中断处接着运行。这就是平常所说的咬尾中断。不难看出,这样可以大大提升中断响应速度。具体到本案,这个咬尾操作一定程度上减少了丢码机会。
既然提到了咬尾中断,可能很多人听说过晚到中断。所谓晚到中断,简单点说就是低优先级中断服务程序正在压栈或刚压栈完毕时发生更高优先级的中断请求,高优先级中断不再做PUSH压栈操作,等到低优先级中断压栈完毕即直接运行高优先级中断服务程序,随后再返回来接着执行低优先级中断服务程序,之后再做POP弹栈操作。 前面提到的STM32F0 的两个中断优先级相同情况下,都是假定中断请求在时间上错开了的情况。如果二者同时到达,那CPU先响应哪一个呢?就看二者在中断矢量表的序号,谁的序号小就先响应谁。
另外,玩过CORTEX M3/M4内核MCU的人,比方STM32F1,STM32F2,STM32F3,STM32F4等芯片的人可能会发现,CORTEX M0 内核的MCU的中断管理跟其它CORTEX M3/M4内核的在中断优先级管理上是有差异的。 M3/M4的MCU在中断优先级做分组管理,分抢占优先级和响应优先级。只有强占优先级高的中断请求才可以打断低抢占优先级的中断服务程序;抢占优先级相同的情况下,高响应优先级的中断请求顶多可以优先获得响应权。而M0内核芯片的中断优先级不再做分组管理,谁的优先级高就优先响应并可打断低优先级的中断服务程序。 当在系统里开启多个中断事件时,要合理安排各中断源的优先级,有些时候可能还需精心安排。对于初学者,因为中断优先级问题处理不当而导致麻烦的情况时有发生。再就是对于中断服务程序,如果不是必需,代码尽量精简,不要累赘,能放到中断外部处理的就尽量放到外部去。
|