处理外部中断-王道考研模拟408的8套卷
6.1处理外部中断上面都是简单的点亮LED,相信不少朋友看到后,对uC/OS-II下编程还是会有所不解的,尤其是在uC/OS-II里如何处理外部中断。其实,uC/OS-II里的中断跟裸机的中断没啥区别,唯一的区别就是uC/OS-II中断服务中需要调用中断服务函数OSIntEnter和OSIntExit。 OSIntEnter用来统计中断嵌套层数OSIntExit当中断嵌套层数为0,OSLockNesting为0,有最高优先级进入就绪表时,就会进行任务切换。 M3移植过程中,把uC/OS-II的任务切换编程为最低中断优先级,即在中断函数里,不会发生任务切换这类的事情,等中断结束后调用中断服务函数OSIntExit()进行任务调度(中断嵌套层数为0且OSLockNesting为0,有最高优先级进入就绪表)。而裸机的时候,中断返回到我们被中断的函数,两者的差别就在开头和结尾一步。参考在stm32f10x_it.c的SysTick中断的处理代码: 605. void SysTick_Handler(void) 606. { 607. OSIntEnter(); //开头添加OSIntEnter 608. OSTimeTick(); //中间就是中断函数需要处理的代码609. OSIntExit(); //结尾添加OSIntExit 610. }
下载地址
用户评论