版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中断和时钟第1页,共39页,2022年,5月20日,4点49分,星期日第六章 uC/os-II中断和时钟中断是计算机系统处理异步事件的重要机制。当异步事件发生时,事件通常通过硬件向CPU发出中断请求。在一般情况下,CPU响应这个请求后会立即运行中断服务程序来处理该事件。uC/os-II的时钟是通过硬件定时器产生定时中断来实现的第2页,共39页,2022年,5月20日,4点49分,星期日6.1 uC/os-II的中断6.1.1 uC/os-II的中断过程6.1.2 中断级任务切换函数6.1.3 应用程序中的临界段6.2 uC/os-II的时钟6.3 时间管理6.3.1 任务的延时6.3.2 取消
2、任务的延时6.3.3 获取和设置系统时间第3页,共39页,2022年,5月20日,4点49分,星期日6.1.1 uC/os-II的中断过程uC/os-II系统响应中断的过程是:系统接收到中断请求后,如果这是CPU处于中断允许状态(即中都是开放的),系统就会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断务子程序;当中断服务子程序的运行结束后,系统将会根据情况返回到被中止的任务继续运行,或者转向运行另一个具有更高优先级别的就绪任务第4页,共39页,2022年,5月20日,4点49分,星期日需要注意的:对于可剥夺型的uC/os-II内核来说,中断服务子程序运行结束后,系统将会根据情况进行
3、一次任务调度去运行优先级别最高的就绪任务,而并不一定要接续运行被中断的任务第5页,共39页,2022年,5月20日,4点49分,星期日uC/os-II系统允许中断嵌套,即高优先级别的中断源的中断请求可以中断低优先级的中断服务程序的运行。为了记录中断嵌套的层数,uC/os-II定义了一个全局变量OSIntNesting第6页,共39页,2022年,5月20日,4点49分,星期日ucos 中断响应过程第7页,共39页,2022年,5月20日,4点49分,星期日中断中用到的两个重要函数:OSIntEnter()OSIntExit()第8页,共39页,2022年,5月20日,4点49分,星期日OSIn
4、tEnter()函数OSIntEnter()的作用是把全局变量OSIntNesting加1,从而用它来记录中断嵌套的层数。void OSIntEnter()if(OSRunning = TRUE)if(OSIntNesting 0) OSIntNesting-; 第13页,共39页,2022年,5月20日,4点49分,星期日 if (OSIntNesting = 0) & (OSLockNesting = 0) OSIntExitY = OSUnMapTblOSRdyGrp; OSPrioHighRdy = (INT8U)(OSIntExitY OSTCBStkPtr; 恢复所有处理器的寄存器
5、内容(不包括堆栈指针寄存器和PC寄存器); 恢复PC寄存器并开始执行PC指向的指令。 第18页,共39页,2022年,5月20日,4点49分,星期日6.1.3 应用程序中的临界段当有异步事件发生时会引发中断请求,但CPU只有在中断开放期间才响应中断请求即所有CPU都具有开中断和关中断指令,比便使一些代码段不受到中断的干扰在ucos中,那些不希望被中断的代码段就是临界段处在关中断和开中断之间的代码段就是临界段第19页,共39页,2022年,5月20日,4点49分,星期日由于各个厂商生产的CPU和C编译器的关中断和开中断的方法及指令不尽相同为增强ucos移植性,ucos用OS_ENTER_CRIT
6、ICAL()和OS_EXIT_CRITICAL()这两个宏封装了与系统硬件相关的关中断和开中断指令注意:不要在临界段中调用ucos提供的功能函数,以免系统崩溃第20页,共39页,2022年,5月20日,4点49分,星期日宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的实现方法OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()可以有3种不同的实现方法。实际应用时使用哪种方法,取决于用户使用的处理器及C编译器用户可以通过定义移植文件OS_CPU.H中的常数OS_CRITICAL_METHOD来选择实现方法第21页,共39页,2022年,5月
7、20日,4点49分,星期日方法1:直接使用处理器的开中断和关中断指令来实现宏,这时需要定义令常数OS_CRITICAL_METHOD=1#define OS_ENTER_CRITICAL() asm(DI)/关中断#define OS_EXIT_CRITICAL() asm(EI)/开中断第22页,共39页,2022年,5月20日,4点49分,星期日方法2:可使CPU中断允许标志的状态在临界段前和临界段后不发生改变在宏OS_ENTER_CRITICAL()中,把CPU的允许中断标志保持到堆栈中,然后再关闭中断,这样在临界段结束时,即再调用宏OS_EXIT_CRITICAL()时,只要把堆栈中保
8、存的CPU允许中断状态恢复即可第23页,共39页,2022年,5月20日,4点49分,星期日#define OS_ENTER_CRITICAL() asm(PUSH PSW) /通过保存程序状态字来保存中断允许标志asm(DI) /关中断#define OS_EXIT_CRITICAL() asm(POP PSW) /恢复中断允许标志第24页,共39页,2022年,5月20日,4点49分,星期日方法3:前提条件用户使用的C编译器具有扩展功能。用户可获得程序状态字的值,这样就可把该值保存在C函数的局部变量中,而不必压到堆栈里。如果用这种方法实现宏,需要令常数OS_CRITICAL_METHOD=
9、3第25页,共39页,2022年,5月20日,4点49分,星期日#define OS_ENTER_CRITICAL() cpu_sr=get_processor_psw(); /获得程序状态字并保存在全局变量sr中disable_interrupts(); /关中断#define OS_EXIT_CRITICAL() set_processor_psw(cpu_sr);/恢复中断允许标志第26页,共39页,2022年,5月20日,4点49分,星期日6.2uC/os-II的时钟任何操作系统都要提供一个周期性的信号源,以供系统处理诸如延时,超时等与时间有关的事件,这个周期性的信号源叫做时钟ucos
10、与大多数计算机系统一样,用硬件定时器产生一个周期为毫秒级的周期性中断来实现系统时钟最小的时钟单位就是两次中断之间相间隔的时间,这个最小时钟单位叫做时钟节拍(Time Tick)第27页,共39页,2022年,5月20日,4点49分,星期日硬件定时器以时钟节拍为周期定时地产生中断,该中断的中断服务程序叫OSTickISR()。中断服务程序通过调用函数OSTimeTick()来完成系统在每个时钟节拍时需要做的工作OSTickISR()是用汇编语言来编写的第28页,共39页,2022年,5月20日,4点49分,星期日OSTickISR()保存处理器寄存器;调用OSIntEnter()或者直接给OSI
11、ntNesting加1;if(OSIntNesting=1)OSTCBCur-OSTCBStkPtr=Stack Pointer;给产生中断的设备清中断;重新允许中断(可选);第29页,共39页,2022年,5月20日,4点49分,星期日OSTimeTick(); /给延时到的任务就绪态OSIntExit(); /这个函数与OSSched 差不多,都是将最高级任务置为就绪态恢复处理器寄存器;执行中断返回指令;第30页,共39页,2022年,5月20日,4点49分,星期日在时钟中断服务程序中调用的OSTimeTick()叫做时钟节拍服务函数任务就是在每个时钟节拍了解每个任务的延时状态,使其中已经
12、到了延时时限的非挂起任务进入就绪状态第31页,共39页,2022年,5月20日,4点49分,星期日void OSTimeTick (void) OS_TCB *ptcb; OSTimeTickHook(); ptcb = OSTCBList; while (ptcb-OSTCBPrio != OS_IDLE_PRIO) OS_ENTER_CRITICAL(); if (ptcb-OSTCBDly != 0) if (-ptcb-OSTCBDly = 0) if (!(ptcb-OSTCBStat & OS_STAT_SUSPEND) /* 这一行判断任务是不是被函数OSTaskSuspend(
13、)挂起,原理? */ OSRdyGrp |= ptcb-OSTCBBitY; OSRdyTblptcb-OSTCBY |= ptcb-OSTCBBitX; else ptcb-OSTCBDly = 1; ptcb = ptcb-OSTCBNext; OS_EXIT_CRITICAL(); 第32页,共39页,2022年,5月20日,4点49分,星期日6.3.1 任务的延时由于嵌入式系统的任务是一个无限循环,并且ucos还是一个抢占式内核,所以为了使高优先级别的任务不至于独占CPU,可以给其他任务优先级别较低的任务获得CPU使用权的机会ucos规定:除了空闲任务之外的所有任务必须在任务中合适的位
14、置调用系统提供的函数OSTimeDly(),使当前任务的运行延时(暂停)一段时间并进行一次任务调度,以让出CPU的使用权第33页,共39页,2022年,5月20日,4点49分,星期日void OSTimeDly (INT16U ticks)#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif if (ticks 0) OS_ENTER_CRITICAL(); if (OSRdyTblOSTCBCur-OSTCBY &= OSTCBCur-OSTCBBitX) = 0) OSRdyGrp &= OSTCBCur-OSTCBBitY; OSTCBCu
15、r-OSTCBDly = ticks; OS_EXIT_CRITICAL(); OS_Sched(); 第34页,共39页,2022年,5月20日,4点49分,星期日函数的参数ticks是以时钟节拍数为单位的延时时间为了能够使用更为习惯的方法来使任务延时,ucos还提供了一个可以用时,分,秒为参数的任务延时函数OSTimeDlyHMSM()第35页,共39页,2022年,5月20日,4点49分,星期日6.3.2 取消任务的延时延时的任务可以通过在其他任务中调用函数OSTimeDlyResume()取消延时而进入就绪状态。如果任务比正在运行的任务优先级别高,则立即引发一次任务调度。原型:INT8
16、U OSTimeDlyResume(INT8U prio);prio:为被取消延时任务的优先级别第36页,共39页,2022年,5月20日,4点49分,星期日NT8U OSTimeDlyResume (INT8U prio) OS_TCB *ptcb; if (prio = OS_LOWEST_PRIO) (1) return (OS_PRIO_INVALID); OS_ENTER_CRITICAL(); ptcb = (OS_TCB *)OSTCBPrioTblprio; if (ptcb != (OS_TCB *)0) (2) if (ptcb-OSTCBDly != 0) (3) ptc
17、b-OSTCBDly = 0; (4) if (!(ptcb-OSTCBStat & OS_STAT_SUSPEND) (5) OSRdyGrp |= ptcb-OSTCBBitY; (6) OSRdyTblptcb-OSTCBY |= ptcb-OSTCBBitX; OS_EXIT_CRITICAL(); OSSched(); (7) else OS_EXIT_CRITICAL(); return (OS_NO_ERR); else OS_EXIT_CRITICAL(); return (OS_TIME_NOT_DLY); else OS_EXIT_CRITICAL(); return (OS_TASK_NOT_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上饶市广丰县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 白银市白银区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 果洛藏族自治州甘德县2025-2026学年第二学期五年级语文第四单元测试卷(部编版含答案)
- 厦门市湖里区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 伊春市翠峦区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 保定市高碑店市2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 公司接待方案
- 深度解析(2026)《CBT 4428-2015船用辅锅炉控制设备技术条件》
- 深度解析(2026)《CBT 4015-2005 J类法兰青铜 1.6MPa截止阀》
- 深度解析(2026)《AQT 1121-2023煤矿安全现状评价实施细则》宣贯培训长文
- 江西省港口集团招聘笔试题库2026
- 给水工程可行性研究报告
- 装饰装修施工安全培训课件
- 《生物医学新技术临床研究和临床转化应用管理条例》测试练习竞赛考试题库(附答案)
- 2026年细胞免疫学实验计划
- 铁路货车课件
- 审计法讲解课件
- 2026年公安机关理论考试题库300道及参考答案(满分必刷)
- 做账实操-金属制品有限公司成本核算SOP
- 老年性发声障碍嗓音声学评估与方案
- 植物根的生长课件
评论
0/150
提交评论