- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式实时操作系统μC/OS –II教程 本章要求 主要内容 掌握μC/OS –II的任务调度与管理的原理 掌握核心函数、任务管理以及部分 其他系统服务功能 重点 任务的状态、切换以及创建等知识 任务控制块及就绪表 难点 任务控制块的组成 就绪表的工作原理 课时安排:6课时 目录 3.1 核心函数 3.2 任务管理函数 3.3 部分其他系统服务功能 3.1.1 临界区的处理 临界区就是访问共享资源的那段代码。 μC/OS –II采用关中断的方式来实现临界区的独占访问。 μC/OS –II提供了两个宏来开关中断: OS_ENTER_CRITICAL() OS_EXIT_CRITICAL() 3.1.1 临界区的处理 μC/OS –II提供了三种开关中断的方法(可在文件OS_CPU.H中使用常量OS_CRITICAL_METHOD来选择) OS_CRITICAL_METHOD=1:直接用微处理器指令开关中断 OS_CRITICAL_METHOD=2: OS_CRITICAL_METHOD=3:用局部变量保存中断开关状态 3.1.2 任务的形式 μC/OS –II的任务就是一个C函数,其特征为: 具有一个返回类型和一个参数 任务的返回类型必须定义成void型 任务的结构必须是两种之一 无限循环结构 只执行一次就被删除的程序 任务永不返回 μC/OS –II的任务的优先级数也是任务的唯一标识,最多有64个优先级,对应64个任务。建议保留4个最高优先级和4个最低优先级为将来作扩展应用,用户可以使用的优先级为56个。优先级的值越小,级别越高。宏OS_LOWEST_PRIO表示最低优先级。 3.1.2 任务的形式 3.1.2 任务的形式 3.1.3 任务的状态 3.1.4 任务控制块 任务控制块(Task Control Blocks,OS_TCB)是一个用来保存任务各种状态信息的数据结构。 任务存在的标志 保存任务的状态 为任务的恢复运行时还原现场,提供保证 3.1.4 任务控制块 任务控制块数据结构分析 3.1.4 任务控制块 3.1.4 任务控制块 3.1.4 任务控制块 宏OS_MAX_TASKS(在文件OS_CFG.H中定义):表示最多任务数,规定用户程序任务数必须小于等于该值,但必须大于2。 所有的任务控制块放在任务控制块列表数组OSTCBTb1[]中。 空闲任务控制块的组织: 3.1.5 就绪表 就绪表:用于存放任务准备就绪标志的列表,它是为了保证每次任务切换事件的可确定性、一致性和高速性而设置的。其组成如下: 两个变量:OSRdyGrp、OSRdyTb1[] 两个表格: 位掩码表OSMapTb1[] 优先级判定表OSUnMapTb1[] 三个程序 使任务进入就绪的程序 使任务脱离就绪的程序 寻找准备就绪的最高优先级的程序 3.1.5 就绪表 就绪表的原理 就绪表的结构 3.1.5 就绪表 位掩码表OSMapTb1[] 3.1.5 就绪表 优先级判定表OSUnMapTb1[] 3.1.5 就绪表 使任务进入就绪的程序 使任务脱离就绪的程序 寻找准备就绪的最高优先级的程序 3.1.6 任务的调度 任务调度机制是内核的核心。 μC/OS –II的调度器提供两个功能 确定进入就绪态的任务中哪个优先级最高 进行任务切换 任务级的调度由OSSched()完成 中断级的调度由OSIntExt()完成 OSSched()代码分析 3.1.7 任务级的任务切换 μC/OS –II任务的切换有两种模式: 任务级的任务切换:调用OS_TASK_SW()完成 中断级的任务切换:调用OSIntCtxSw()完成 任务级切换过程分析 为了便于讨论,构造一假象CPU,该CPU拥有8个寄存器,即通用寄存器(R1、R2、R3、R4、R5)、堆栈指针SP、程序计数器PC和程序状态字PSW。 3.1.7 任务级的任务切换 任务切换的示意性代码(用宏OS_TASK_SW()替代函数OSCtxSw()) 3.1.8 调度器上锁和开锁 调度器上锁函数OSSchedlock():用于禁止任务调度,使任务保持对CPU的控制权。 3.1.8 调度器上锁和开锁 调度器开锁函数OSSchedUnlock():用于解除对任务调度的禁止。 3.1.9 空闲任务 空闲任务OSTaskIdle()是μC/OS –II必不可少的系统函数,当没有其它任务进入就绪态时,该任务立即转入运行态,其优先级永远设为最低,永远不被挂起,不能被删除。 3.1.10 统计任务 统计任务OSTaskStat()是μC/OS –II的系统函数之一,用于计算当前CPU的利用率。由宏OS_TASK_STAT_EN控制其使用。 计算CPU使用率方法: 3.1.10 统计任务 3.1.11 μC/
文档评论(0)