版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式操作系统嵌入式操作系统与程序设计与程序设计第三章第三章 中断和时间管理中断和时间管理 3.1 中断管理 3.1.1中断管理核心思路 3.1.2中断处理的流程 3.1.3时钟中断服务 3.2 时间管理 3.2.1时间管理主要数据结构 3.2.2时间的获取和设置 3.2.3任务延时函数OSTimeDly 3.2.4任务按分秒延迟函数OSTimeDlyHMSM 3.2.5延时恢复函数OSTimeDlyResume 习题C/OS-II系统响应中断的过程C/OS-II系统响应中断的过程为:系统接收到中断请求后,这时如果CPU处于中断允许状态(即中断是开放的),系统就会中止正在运行的当前任务,而按照
2、中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统将会根据情况返回到被中止的任务继续运行或者转向运行另一个具有更高优先级别的就绪任务。注意!中断服务子程序运行结束之后,系统将会根据情况进行一次任务调度去运行优先级别最高的就绪任务,而并不是一定要接续运行被中断的任务的。中断请求关闭中断转到中断向量保存CPU寄存器通知内核退出ISRISR给任务发信号中断返回恢复CPU寄存器中断响应中断恢复中断恢复任务响应时间任务响应时间中断的响应过程无新高级任务则返回原任务通知内核退出ISR恢复CPU寄存器中断返回有新高级任务则运行高级任务通知内核进入ISR3.1 3.1 中断管理中断管理
3、中断响应的快速性中断响应的快速性中断处理的迅速性中断处理的迅速性3.1.1 中断管理核心思路中断管理核心思路如果正在运行的任务没有关闭中断,在中断到来的时候,操作系统响应中断,进入中断服务程序。这时候任务的运行环境还没有保存,因此需要将任务的运行环境保存。这时候任务由于中断的到来而进入挂起态。 进入中断服务程序,首先将当前正在运行的任务的进入中断服务程序,首先将当前正在运行的任务的CPU环境保存。接着将中断使用的一个重要的全局变量,环境保存。接着将中断使用的一个重要的全局变量,OSIntNesting加加1,表示中断嵌套深了一层。实现这一,表示中断嵌套深了一层。实现这一功能的就是功能的就是OS
4、IntEnter,该函数实现且只实现这一功能。,该函数实现且只实现这一功能。表表3.1 OSIntEnter代码代码 中断服务完成后,应调用与中断服务完成后,应调用与OSIntEnter相匹配的相匹配的OSIntExit来进行最后的处理。来进行最后的处理。OSIntExit这个函数是用这个函数是用来通知来通知C/OS-II,已经结束了中断的操作。将,已经结束了中断的操作。将OSIntNesting的值减的值减1,并找到优先级最高的那个任务,并找到优先级最高的那个任务来运行,而并非是原来被挂起的那个任务。来运行,而并非是原来被挂起的那个任务。void OSIntEnter (void) if (
5、OSRunning = TRUE) if (OSIntNesting 0) OSIntNesting-;/中断嵌套层数计数器减一中断嵌套层数计数器减一 if (OSIntNesting = 0) & (OSLockNesting = 0) OSIntExitY = OSUnMapTblOSRdyGrp; OSPrioHighRdy = (INT8U)(OSIntExitY OSTCBStkPtr = SP; /保存堆栈指针调用调用OSTimeTick( );/节拍处理清除中断;开中断;调用OSIntExit( );/中断嵌套层数减一 恢复CPU寄存器;中断返回; 时钟节拍服务函数 这是
6、系统时钟中断服务程序函数OSTimeTick( )的任务,就是在每个时钟节拍了解每个任务的延时状态,使其中已经到了延时时限的非挂起任务进入就绪状态。 void 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) /任务的延时时间减一 if (
7、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( ); 3.2 3.2 时间管理时间管理时间管理的内容在代码时间管理的内容在代码os_time.c中,包含了操作系统时间的设置及获取,中,包含了操作系统时间的设置及获取,对任务的延时,任务按分秒延时,取消任务的延时共对任务的延时
8、,任务按分秒延时,取消任务的延时共5个系统调用。个系统调用。 3.2.1时间管理主要数据结构时间管理主要数据结构 volatile INT32U OSTime; 任务控制块 TCB中的OSTCBDly 3.2.2时间的获取和设置时间的获取和设置表3.3时间的设置OSTimeSet和获取函数OSTimeGet时间获取函数OSTimeGet简单地返回OSTime的值 时间设置函数OSTimeSet简单地设置OSTime的值 注意:因为OSTime 是被保护的全局变量,在访问的时候必须使用OS_ENTER_CRITICAL()进入临界区,保证独占访问!3.2.3任务延时函数任务延时函数OSTimeD
9、ly任务延时函数OSTimeDly用于阻塞任务一定时间,这个时间以参数的形式给出。如果这个参数的值是N,那么在N个时间片(时钟嘀嗒)之后,任务才能回到就绪状态获得继续运行的机会。如果参数的值是0,不会阻塞任务。 表3.4任务延时函数OSTimeDly代码分析问题:调用OSTimeDly(1) 会阻塞多少时间?3.2.4任务按分秒延迟函数任务按分秒延迟函数OSTimeDlyHMSM 任务延时函数OSTimeDly用于将任务阻塞一段时间,这个时间是以时间片为单位的。如果想以小时、分、秒、毫秒为单位进行进行任务延时,需要调用以分秒作为单位的任务延时函数OSTimeDlyHMSM。 OSTimeDly
10、HMSM从功能上来说和OSTimeDly并没有多大的差别,只是将时间单位进行了转换,也就是说转换了以小时、分、秒、毫秒为单位的时间和以时间片为单位的时间。OSTimeDlyHMSM的参数分别是延时的小时数hours,分钟数minutes,秒数seconds,和毫秒数ms。 表3.5任务按分秒延时函数OSTimeDlyHMSM 代码分析3.2.5延时恢复函数延时恢复函数OSTimeDlyResume 任务在延时之后,进入阻塞状态。当延时时间到了就从阻塞状态恢复到就绪态,可以被操作系统调度执行。但是,并非回到就绪态就只有这么一种可能,因为即便任务的延时时间没到,还是可以通过OSTimeDlyResume恢复该任务到就绪态。 对于因等待事件发生而阻塞的,并且设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 25343.2-2026轨道交通机车车辆及其零部件的焊接第2部分:基本要求
- 大学校园实验室事故应急演练脚本
- (完整版)文旅行业合规管理体系及监督措施
- 服务器维护规程
- 《学校体育学》练习考试复习题库(含答案)
- 设备事故登记记录表
- 椎间盘镜下前入路颈椎间盘切除术后护理查房
- 颌部皮肤继发恶性肿瘤护理查房
- CN119858861A 一种桥式起重机吊装运输路径的多目标优化方法
- 喉粘连松解术后护理查房
- 城市地下综合管廊运行安全风险防控导则(试行)
- 2025研究哈萨克斯坦中亚铁路运输通道规划分析评估基建投资报告
- 2025家庭无创通气技术应用规范专家共识解读课件
- DB44∕T 2435-2023 水稻全程机械化生产技术规程
- 幼儿每日营养膳食
- 【MOOC】《急救常识》(武汉大学)章节期末慕课答案
- 哈密大型双氧水施工方案
- 重症监护室的营养支持
- 压力容器焊工证考试题及答案
- 教改项目结项汇报
- 网络与数据安全培训课件
评论
0/150
提交评论