电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

uCOSii中断处理过程详解VIP免费

uCOSii中断处理过程详解_第1页
1/21
uCOSii中断处理过程详解_第2页
2/21
uCOSii中断处理过程详解_第3页
3/21
一. U COSII 的中断过程简介 系统接收到中断请求后,如果CPU 处于开中断状态,系统就会中止正在运行的当前任务,而按中断向量的指向去运行中断服务子程序,当中断服务子程序运行完成后,系统会根据具体情况返回到被中止的任务继续运行,或转向另一个中断优先级别更高的就绪任务。 由于UCOS II 是可剥夺型的内核,所以中断服务程序结束后,系统会根据实际情况进行一次任务调度,如果有优先级更高的任务,就去执行优先级更高的任务,而不一定要返回被中断了的任务。 二.UCOSII 的中断过程的示意图 三.具体中断过程 1.中断到来,如果被CPU 识别,CPU 将查中断向量表,根据中断向量表,获得中断服务子程序的入口地址。 2.将 CPU 寄存器的内容压入当前任务的任务堆栈中(依处理器的而定,也可能压入被压入被中断了的任务堆栈中。 3.通知操作系统将进入中断服务子程序。即:调用 OSIntEnter()或 OSIntNesting 直接 加 1。 4.If(OSIntNesting==1) {OSTCBCur->OSTCBStrPtr=SP;} //如果是第一层中断,则将堆栈指针保存到被中断任务的任务控制块中 5.清中断源,否则在开中断后,这类中断将反复的打入,导致系统崩贵 6.执行用户 ISR 7.中断服务完成后,调用 OSIntExit().如果没有高优先级的任务被中断服务子程序激活而进入就绪态,那么就执行被中断了的任务,且只占用很短的时间. 8.恢复所有 CPU 寄存器的值. 9.执行中断返回指令. 四.相关代码 与编译器相关的数据类型: typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef unsigned int OS_STK; //堆栈入口宽度为16 位 (一) void OSIntEnter (void)的理解 uCOS_II.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 位无符号整型数全局变量,用来表 //示中断嵌套层数 OS_CORE.C 中的 OSIntEnter()函数原型: void OSIntEnter (void) { if (OSRunning == TRUE) //如果内核正在运行则进入 if { if (OSIntNesting < 255) //如果嵌套层数小于255,则可以继//续 { OSIntNesting++; //嵌套层数加1 } } } (二)在中断服务子程序中加if ( OSIntNesting...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

uCOSii中断处理过程详解

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部