中断和时钟机制ppt课件_第1页
中断和时钟机制ppt课件_第2页
中断和时钟机制ppt课件_第3页
中断和时钟机制ppt课件_第4页
中断和时钟机制ppt课件_第5页
已阅读5页,还剩28页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第八章第八章 C/OS-C/OS-的中断和时钟的中断和时钟 2本章主要内容:3C/OS-II系统响应中断的过程系统响应中断的过程系统接收到中断请求后,如果中断未关闭,系统就会中止正在运行的当前任务,按照系统接收到中断请求后,如果中断未关闭,系统就会中止正在运行的当前任务,按照中断向量转而去运行中断向量转而去运行ISR。当当ISR运行结束,系统将会返回到被中止的任务继续或者转向另一个具有更高优先级运行结束,系统将会返回到被中止的任务继续或者转向另一个具有更高优先级别的就绪任务。别的就绪任务。4系统中断系统中断n中断就是内核控制的任务在运行过程中,应内部或外部异步事件的请求,中止当前任中断就是内

2、核控制的任务在运行过程中,应内部或外部异步事件的请求,中止当前任务的运行,转去处理异步事件所要求的任务或处理的过程。中断服务程序(务的运行,转去处理异步事件所要求的任务或处理的过程。中断服务程序(Interrupt Service Routine)就是应中断请求而运行的子程序。简称为)就是应中断请求而运行的子程序。简称为ISR。中断向量指中断服。中断向量指中断服务子程序务子程序ISR的入口地址,即起始地址。的入口地址,即起始地址。5中断请求关闭中断转到中断向量保存CPU寄存器通知内核退出ISRISR给任务发信号中断返回恢复CPU寄存器中断响应中断恢复中断恢复任务响应时间任务响应时间中断的响应过

3、程无新高级任务则返回原任务通知内核退出ISR恢复CPU寄存器中断返回有新高级任务则运行高级任务通知内核进入ISR6n本章分为内核中断管理及其结构,系统时钟实现方法,时间管理模块的基本结构与功能,本章分为内核中断管理及其结构,系统时钟实现方法,时间管理模块的基本结构与功能,基本服务与接口函数,及其设计与调用方法,相关应用实例程序分析等。基本服务与接口函数,及其设计与调用方法,相关应用实例程序分析等。n将将C/OS-II内核时间模块与中断与时钟管理功能进行组合的原因在于,两个模块的功能和内核时间模块与中断与时钟管理功能进行组合的原因在于,两个模块的功能和性能是密切相关的,中断管理是时间管理的基础。

4、性能是密切相关的,中断管理是时间管理的基础。7nuC/OS-II内核中内核中CPU能够响应中断的条件,可以理解为以下两个部分:一是至少有能够响应中断的条件,可以理解为以下两个部分:一是至少有一个中断源向一个中断源向CPU发出中断信号,二是内核及应用系统允许中断,即未屏蔽中断信发出中断信号,二是内核及应用系统允许中断,即未屏蔽中断信号。号。nC/OS-II内核中的时钟中断技术分为系统中断与系统时钟节拍两个部分组成。内核中的时钟中断技术分为系统中断与系统时钟节拍两个部分组成。 8系统时钟节拍系统时钟节拍 n时钟节拍是特定的周期性中断,也称时钟中断,这个中断可以看作是系统心脏的脉动。时钟节拍是特定的

5、周期性中断,也称时钟中断,这个中断可以看作是系统心脏的脉动。操作系统通过时钟中断来确定时间间隔,实现时间的延时及确定任务超时。中断之间操作系统通过时钟中断来确定时间间隔,实现时间的延时及确定任务超时。中断之间的时间间隔取决于不同的应用,一般在的时间间隔取决于不同的应用,一般在10200 ms之间。之间。n时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时提供等待超时的依据。时钟节拍频率越快,系统额外开销越大。件发生时提供等待超时的依据。时钟节拍频率越快,系统额外开销越大。n系统定义了系统定

6、义了32位无符号整数位无符号整数OSTime来记录系统启动后时钟节拍数。用户程序必须在来记录系统启动后时钟节拍数。用户程序必须在多任务系统启动以后开启时钟节拍计时,在应用程序中调用系统函数多任务系统启动以后开启时钟节拍计时,在应用程序中调用系统函数OSStart()之后。()之后。nC/OS-II中的时钟节拍服务通过在时钟节拍中断服务子程序中调用中的时钟节拍服务通过在时钟节拍中断服务子程序中调用OSTimeTick()实()实现。现。 9C/OS-II与大多数计算机系统一样,用硬件定时器产生一个周期为ms级的周期性中断来实现系统时钟,最小的时钟单位就是两次中断之间相间隔的时间,这个最小时钟单位

7、叫做时钟节拍(Time Tick)。硬件定时器以时钟节拍为周期定时地产生中断,该中断的中断服务程序叫做OSTickISR( )。中断服务程序通过调用函数OSTimeTick( )来完成系统在每个时钟节拍时需要做的工作。10时钟节拍中断服务子程序时钟节拍中断服务子程序nvoid OSTickISR(void) 保存处理器寄存器的值;调用OSIntEnter ()或是将OSIntNesting加1;调用OSTimeTick ();调用OSIntExit ();恢复处理器寄存器的值;执行中断返回指令;11OSTimeTick ()函数()函数nC/OS-II时钟中断服务程序的核心是调用时钟中断服务程

8、序的核心是调用OSTimeTick ()函数。()函数。OSTimeTick ()函数用()函数用来判断延时任务是否延时结束从而将其置于就绪态。其程序伪代码如下:来判断延时任务是否延时结束从而将其置于就绪态。其程序伪代码如下:void OSTimeTick(void) OSTimeTickHook();();/* 调用用户定义的时钟节拍外连函数调用用户定义的时钟节拍外连函数*/while /*(除空闲任务外的所有任务除空闲任务外的所有任务)*/OS_ENTER_CRITICAL();();/*关中断关中断*/对所有任务的延时时间递减;对所有任务的延时时间递减;扫描时间到期的任务,并且唤醒该任务

9、;扫描时间到期的任务,并且唤醒该任务;OS_EXIT_CRITICAL();();/*开中断开中断*/指针指向下一个任务;指针指向下一个任务; OSTime+;/*系统计时时间加系统计时时间加1*/12nuC/OS-II内核对于以上中断响应及中断处理过程,使用以下若干系统函数实现中断与内核之间的控制管理和联系,这些函数分别是:n中断的进入函数OSIntEnter()n中断的退出函数OSIntExit()n中断服务子程序ISRn中断级任务切换函数ISR的任务切换函数OSIntCtxSw( )13void OSIntEnter (void) if (OSRunning = TRUE) if (OS

10、IntNesting 0) OSIntNesting-;/中断嵌套层数计数器减中断嵌套层数计数器减1 if (OSIntNesting = 0) & (OSLockNesting = 0)OSIntExitY = OSUnMapTblOSRdyGrp;OSPrioHighRdy = (INT8U)(OSIntExitY OSTCBStkPtr;/SP指向待运行任务堆栈,用出栈指令把用出栈指令把R1,R2,存入存入CPU通用寄存器;通用寄存器;RETI;/中断返回,PC指待运行任务19参见core.c中关于中断进入和退出的调用的定义ncore.c关于中断及辅助功能的设计与实现技术qvoi

11、d OSIntEnter (void)qvoid OSIntExit (void)qvoid OSSchedLock (void)qvoid OSSchedUnlock (void)20C/OS-II的系统时钟21void OSTickISR(void)保存保存CPU寄存器;寄存器;调用调用OSIntEnter( );/记录中断嵌套层数记录中断嵌套层数if (OSIntNesting = = 1;OSTCBCur-OSTCBStkPtr = SP; /保存堆栈指针保存堆栈指针调用调用OSTimeTick( );/节拍处理节拍处理清除中断;清除中断;开中断;开中断;调用调用OSIntExit(

12、);/中断嵌套层数减中断嵌套层数减1 恢复恢复CPU寄存器;寄存器;中断返回;中断返回; 这是系统时钟中断服务程序这是系统时钟中断服务程序22void OSTimeTick (void) OSTimeTickHook( ); OSTime+;/记录节拍数记录节拍数 if (OSRunning = = TRUE) ptcb = OSTCBList; while (ptcb-OSTCBPrio != OS_IDLE_PRIO) OS_ENTER_CRITICAL( ); if (ptcb-OSTCBDly != 0) if (-ptcb-OSTCBDly = = 0) /任务的延时时间减一任务的延

13、时时间减一 if (ptcb-OSTCBStat & OS_STAT_SUSPEND) = OS_STAT_RDY) OSRdyGrp |= ptcb-OSTCBBitY; OSRdyTblptcb-OSTCBY |= ptcb-OSTCBBitX; else ptcb-OSTCBDly = 1; ptcb = ptcb-OSTCBNext; OS_EXIT_CRITICAL( ); 时钟节拍服务函数时钟节拍服务函数23函数OSTimeTick( )的任务,就是在每个时钟节拍了解每个任务的延时状态,使其中已经到了延时时限的非挂起任务进入就绪状态。 24 任务的延时 这是系统提供的延时函

14、数25嵌入式系统的任务是一个无限循环,C/OS-II是一个抢占式内核,为了使高优先级任务不独占CPU,C/OS-II规定:除了空闲任务之外的所有任务必须在任务中合适的位置调用系统提供的函数OSTimeDly( ),使当前任务的运行延时(暂停)一段时间并进行一次任务调度,以让出CPU的使用权。 26 其他用来管理时间的函数 INT8U OSTimeDlyResume( INT8U prio);INT32U OSTimeGet( void );void OSTimeSet( INT32U ticks ); 取消任务延时函数获得系统时间函数设置系统时间函数27void OSTimeDly (INT1

15、6U ticks)if (ticks 0) OS_ENTER_CRITICAL( );if (OSRdyTblOSTCBCur-OSTCBY &= OSTCBCur-OSTCBBitX)=0) OSRdyGrp &= OSTCBCur-OSTCBBitY;/取消当前任务的就绪状态 OSTCBCur-OSTCBDly = ticks;/延时节拍数存入任务控制块OS_EXIT_CRITICAL( );OS_Sched( ); /调用调度函数 28OSTimeDlyHMSM()函数n任务延迟函数任务延迟函数OSTimeDly()需要确定延时时间对应的时钟节拍。利用全局常数设定()需要

16、确定延时时间对应的时钟节拍。利用全局常数设定OS_TICKS_PER_SEC值,将时间转换成时钟节拍数,参见文件值,将时间转换成时钟节拍数,参见文件OS_CFG.H。nC/OS-内核提供内核提供OSTimeDlyHMSM()函数,可以按小时()函数,可以按小时(H)、分、分(M)、秒、秒(S)和毫和毫秒秒(ms)来定义延迟时间。来定义延迟时间。 29结束任务延时函数结束任务延时函数OSTimeDlyResume()() n有时嵌入式软件根据设计要求,需要根据特定条件,提前结束任务的延时,即任务的有时嵌入式软件根据设计要求,需要根据特定条件,提前结束任务的延时,即任务的延时并未到时,就唤醒该任务

17、,将任务的状态转到就绪。嵌入式操作系统内核应提供延时并未到时,就唤醒该任务,将任务的状态转到就绪。嵌入式操作系统内核应提供这一功能。这一功能。nC/OS-内核允许用户结束正处于延时时限范围内的任务。延时任务可以不等待延时内核允许用户结束正处于延时时限范围内的任务。延时任务可以不等待延时时限到时,而是通过其它任务调用结束任务延时函数时限到时,而是通过其它任务调用结束任务延时函数OSTimeDlyResume()取消该()取消该任务的延时,使得延时任务延时结束,条件许可情况下转到就绪态。调用结束任务延任务的延时,使得延时任务延时结束,条件许可情况下转到就绪态。调用结束任务延时函数时函数OSTime

18、DlyResume()需要指定要恢复的任务优先级作为调用参数。()需要指定要恢复的任务优先级作为调用参数。 30获取系统时间函数获取系统时间函数OSTimeGet()和设置系统时间函数()和设置系统时间函数OSTimeSet()() n由前面的时钟节拍服务函数由前面的时钟节拍服务函数OSTimeTick()的内部流程可知,无论时钟节拍何时发()的内部流程可知,无论时钟节拍何时发生,生,C/OS-内核都会在时钟节拍服务函数内核都会在时钟节拍服务函数OSTimeTick()中,将一个()中,将一个32位的计数位的计数器器OSTime加加1。n对于对于C/OS-内核而言,这个计数器是一个全局量,在用户调用内核而言,这个计数器是一个全局量,在用户调用OSStart()初始化()初始化多任务时清零,并且由于多任务时清零,并且由于32位的计数器的可表示范围,该变量在位的计数器的可表示范围,该变量在4,294,967

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论