欢迎来到天天文库
浏览记录
ID:37641383
大小:627.77 KB
页数:28页
时间:2019-05-27
《东软UCOS-II教程-03-中断与时钟》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、三、三、uC/OS-IIuC/OS-II的中断和时钟的中断和时钟东软IT人才实训中心3Sept.2008Copyright2008ByNeusoftGroup.AllrightsreservedConfidential1第三章:uC/OS-II的中断和时钟目标:学时:3.0学时本章旨在向学员介绍uc/osII实时操作系统的中断概念及时间管理,通过本章的学教学方法:讲授ppt+上机练习,学员应该掌握如下知识:习+点评+案例分析�uC/OSII的中断管理和中断服务程序的结构�uC/OSII的系统时钟及实现方法�时间管理服务:延时、取消延时3Sept.2008C
2、onfidential3.1uC/OS-II的中断�中断:任务在运行过程中,应内部或外部异步事件的请求中止当前任务,而去处理异步事件所要求的任务的过程叫做中断。�中断服务程序:应中断请求而运行的程序叫中断服务子程序(ISR)。�中断向量:中断服务子程序的入口地址叫中断向量。�CPU响应中断的条件:•至少有一个中断源向CPU发出中断信号•系统允许中断,且对此中断信号未予屏蔽3Sept.2008Confidential3.1.1uC/OS-II的中断过程uC/OS-II中断的响应过程:中断请求关闭中断中断中转到中断向量延断迟响保存CPU寄存器应任通知内核进入I
3、SR务响应用户ISR代码时间通知内核退出ISR通知内核退出ISR中中断恢复CPU寄存器断恢恢复CPU寄存器恢复中断返回复中断返回无新高级任务则返回原任务有新高级任务则注意:对于可剥夺型内核,中断服务子运行高级任务程序结束后,系统进行一次任务调度去图3-1中断的响应过程运行优先级最高的就绪任务,而不是一定要接续运行被中断的任务。3Sept.2008Confidential3.1.2中断的开始、离开为记录中断嵌套的层数函数作用就是把全局变量voidOSIntEnter(void),μC/OS-II内核定义OSIntNesting加1,从而用{了一个全局变量它来
4、记录中断嵌套的层数进入if(OSRunning==True){OSIntNesting。if(OSIntNesting<255){NOOSIntNesting++;中断嵌套层数=0?}YESNO}未锁定调度器?}YESvoidOSIntExit(Void)获得最高级别就绪任务的prio{OS_ENTER_CRITICAL();YES任务是被中断的任务?if(OSRunning==TRUE){返回中断服务程序if(OSIntNesting>0){NOOSIntNesting--;}获得任务TCB的指针这个函数在中断嵌套层数if((OSLockNesting=
5、=0)&&(OSIntNesting==0)){计数器为0、调度器未被锁OSIntExity=OSUnMapTbl[OSRdyGrp];OSPrioHighRdy=(INT8U)((y<<3)定且从任务就绪表中查找+OSUnMapTbl[OSRdyTbl[y]]);执行中断级任务切换if(OSPrioHighRdy!=OSPrioCur){到的最高级就绪任务又不OSTCBHighRdy=是被中断的任务的条件下OSTCBPrioTbl[OSPrioHighRdy];OSCtxSwCtr++;将要进行任务切换,否则OSIntCtxSw();//中断级任务切换就
6、返回被中断的任务程序}}}OS_EXIT_CRITICAL();}图3-2函数OSIntExit()的流程图3Sept.2008Confidential3.1.3中断服务子程序的流程中断服务子程序入口调用OSIntExit()通知系统:退出中断服务程序CPU寄存器内容进栈恢复CPU寄存器内容调用OSIntEnter()通知系统:进入中断服务程序执行中断返回指令NO中断嵌套层OSIntNEsting=1?并非为每个任务都定义一个充分大的栈空YES间,中断嵌套时单独定义一个中断嵌套栈OSTCBCur->OSTCBStkPtr=SP,在发生第1次中断时,中断服务
7、程序将栈空间切换到中断嵌套栈,这样,以后发生的清中断源的中断申请标志嵌套中断就一直使用这个栈空间。重新开放中断异步事件产生中断后,通常用一个任务来完异步事件产生中断后,通常用一个任务来完成对异步事件的处理工作,而在中断服务程成对异步事件的处理工作,而在中断服务程运行中断服务代码序中只是采用向任务发送消息的方法去激活序中只是采用向任务发送消息的方法去激活这个任务(将该任务置于就绪态,一般该任这个任务(将该任务置于就绪态,一般该任务优先级较高从而发生抢占)。务优先级较高从而发生抢占)。图3-3中断服务子程序的流程图3Sept.2008Confidential3
8、.1.4中断级任务切换与任务级切换函数OSCtxSW()的原因一样
此文档下载收益归作者所有