ucos中断和时钟解析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中断和时钟 王华斌 Wanghuabin-2003@163.com 中断是计算机系统处理异常事件的重要机制! uC/OS-II的时钟是通过硬件定时器产生定时中断实现的。 任务在运行过程中,应内部或外部异常事件的请求中止当前任务,而去处理异常事件所要求的任务的过程叫做中断。应中断请求而运行的程序叫做中断服务子程序(ISR);中断服务子程序的入口地址叫做中断向量。 1、中断 μC/OS中,中断服务子程序要用汇编语言来写。然而,如果用户使用的C语言编译器支持在线汇编语言的话,用户可以直接将中断服务子程序代码放在C语言的程序文件中。 响应中断过程: 系统接收到中断请求后,如果这时CPU处于中断允许状态,系统就会中止正在运行的任务,而按照中断向量的指向转而去运行中断服务子程序;而中断服务子程序的运行结束后,系统将会根据情况返回到被中止的任务继续执行,或者转向运行另一个具有更高优先级别的就绪任务。(任务的调度) 总结 中断是一种硬件机制,用于通知CPU有个异常事件发生了。中断一旦被识别,CPU保存部分(或全部)现场(Context)即部分或全部寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。中断服务子程序做事件处理,处理完成后,程序回到: (1)在前后台系统中,程序回到后台程序 (2)对不可剥夺型内核而言,程序回到被中断了的任务 (3)对可剥夺型内核而言,让进入就绪态的优先级最高的任务开始运行 中断嵌套 UC/OS-II系统运行中断嵌套,即:高优先级别的中断源的中断请求可以中断低优先级别的中断服务程序的运行。 为了记录中断嵌套的层数,定义了一个全局变量OSIntNesting。 (1)进入中断函数: void OSIntEnter (void) { if(OSRunning==TRUE) { if(OSIntNesting255) { OSIntNesting++;} //中断嵌套层数计数器加1 } } 调用情况:此函数在中断服务程序保护断点数据后,运行用户中断服务代码之前来调用,所以通常把它叫做进入中断服务函数。 (2)退出中断服务函数 说明:这个函数在中断嵌套层数计数器为0、调度器未被锁定、从任务就绪表中查找到的最高级就绪任务不是被中断的任务的条件下将要进行任务切换,否则就返回被中断的服务子程序 源代码见下页 void OSIntExit (void) { OS_ENTER_CRITICAL(); if ((--OSIntNesting OSLockNesting) = = 0) { OSIntExitY = OSUnMapTbl[OSRdyGrp]; OSPrioHighRdy = (INT8U)((OSIntExitY 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]); if (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; OSCtxSwCtr++; OSIntCtxSw(); } } OS_EXIT_CRITICAL(); } 用户中断服务子程序流程: 1、保存全部CPU寄存器; 2、调用OSIntEnter或OSIntNesting直接加1 3、If(OSIntNesting == 1){ OSTCBCur-OSTCBStkPtr = SP}//V2.04以上新增 4、清中断源 5、重新开中断 6、执行用户代码做中断服务; 7、调用OSIntExit(); 8、恢复所有CPU寄存器; 9、执行中断返回指令; 中断级任务切换函数 uC/OS-II在运行完中断服务程序之后,并不一定返回到被中断的任务上去,而是要进行一次任务调度来决定是返回被中断的任务还是运行一个具有更高优先级别的任务,因此系统需要一个中断级任务调度器。 由函数OSIntExit()的源代码可以知道,通过调用函数OSIntCtxSw()来进行中断级的任务切换。在中断服务程序中调用的负责任务切换的函数OSIntCtxSw()叫做中断级任务切换函数。 2、时钟 时钟:任何操作系统都要提供一个周期性的信号源,以供系统处理与时间相关的事件,这个周期性的信号源叫做时钟。 时钟节拍:UC/OS-II用硬件定时器产生一个周期为毫秒级的周期性中断来实现系统时钟。最小的时钟就是两次中断之间间隔的时间,这个最小时钟单位叫做时钟节拍。 OSTickISR() :硬件定时器以

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档