uCOSii中断处理过程详解(一)

uCOSii中断处理过程详解(一)

ID:37691975

大小:302.00 KB

页数:21页

时间:2019-05-28

uCOSii中断处理过程详解(一)_第1页
uCOSii中断处理过程详解(一)_第2页
uCOSii中断处理过程详解(一)_第3页
uCOSii中断处理过程详解(一)_第4页
uCOSii中断处理过程详解(一)_第5页
资源描述:

《uCOSii中断处理过程详解(一)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一.  UCOSII的中断过程简介系统接收到中断请求后,如果CPU处于开中断状态,系统就会中止正在运行的当前任务,而按中断向量的指向去运行中断服务子程序,当中断服务子程序运行完成后,系统会根据具体情况返回到被中止的任务继续运行,或转向另一个中断优先级别更高的就绪任务。由于UCOSII是可剥夺型的内核,所以中断服务程序结束后,系统会根据实际情况进行一次任务调度,如果有优先级更高的任务,就去执行优先级更高的任务,而不一定要返回被中断了的任务。二.UCOSII的中断过程的示意图三.具体中断过程1.中断到来,如果被CPU识别,CP

2、U将查中断向量表,根据中断向量表,获得中断服务子程序的入口地址。2.将CPU寄存器的内容压入当前任务的任务堆栈中(依处理器的而定,也可能压入被压入被中断了的任务堆栈中。3.通知操作系统将进入中断服务子程序。即:调用OSIntEnter()或OSIntNesting直接加1。4.If(OSIntNesting==1){OSTCBCur->OSTCBStrPtr=SP;}//如果是第一层中断,则将堆栈指针保存到被中断任务的任务控制块中5.清中断源,否则在开中断后,这类中断将反复的打入,导致系统崩贵6.执行用户ISR7.中断服务

3、完成后,调用OSIntExit().如果没有高优先级的任务被中断服务子程序激活而进入就绪态,那么就执行被中断了的任务,且只占用很短的时间.8.恢复所有CPU寄存器的值.9.执行中断返回指令. 四.相关代码       与编译器相关的数据类型:       typedefunsignedcharBOOLEAN;       typedefunsignedcharINT8U;       typedefunsignedintOS_STK;//堆栈入口宽度为16位(一)void OSIntEnter(void)的理解uCOS_I

4、I.H中定义:#ifdef  OS_GLOBALS#define OS_EXT#else#define OS_EXT extern#endif    //定义全局宏OS_EXT#ifndef TRUE#define TRUE  1#endif            OS_EXT BOOLEAN  OSRunning;//定义外部BOOLEAN类型全局变量,用来指示//核是否在运行           OS_EXT INT8U  OSIntNesting;//定义外部8位无符号整型数全局变量,用来表             

5、                           //示中断嵌套层数OS_CORE.C中的OSIntEnter()函数原型:void OSIntEnter(void){                    if(OSRunning==TRUE)//如果内核正在运行则进入if{                             if(OSIntNesting<255)//如果嵌套层数小于255,则可以继//续{                                     OSIntNesting++;

6、//嵌套层数加1                                  }                          }}        (二)在中断服务子程序中加if(OSIntNesting==1){…}的原因           uCOS_II.H中定义:typedefstructos_tcb{             OS_STK   *OSTCBStkPtr;//声明指向任务堆栈栈顶的16位指针  ………………}OS_TCB;//定义名为OS_TCB的结构体数据类型,即任务控制块的数据结构OS

7、_EXT OS_TCB  *OSTCBCur;//声明一个指向任务控制块的全局指针变量                          //用于指向当前任务的任务控制块中断服务程序中添加的代码:if(OSIntNesting==1){                     OSTCBCur->OSTCBStkPtr=SP;//如果是第一层中断,则将被中断任务                                                       //的堆栈指针保存在被中断任务的任务         

8、                                       //任务控制块中                                                                                                         

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。