嵌入式第3章题稿.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式操作系统 —— uC/OS-II实时操作系统 信息电子学院电科系 王 成 群 Email: wangchengqun@ 手机办公室:10号楼541 uC/OS-II任务调度与系统初始化 uC/OS-II任务级调度机制 uC/OS-II任务级任务调度 uC/OS-II中断级任务调度 uC/OS-II任务调度应用实例 任务调度 调度 通过一个算法在多个任务中确定哪个任务来运行,让CPU中止当前运行的任务,转而去运行另一任务叫切换。 调度器 做任务调度工作的函数 uC/OS-II进行调度的思想 每时每刻总是让优先级最高的就绪任务处于运行状态 调用调度器来确定应该运行的任务并运行它 注意事项: ?C/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权开始投入运行。 ?C/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。 ?C/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关 μC/OS-II调度算法和调度方式 优先级调度算法原理为:给每一个任务分配一个惟一优先级,各优先级用一个整形数值标识,某优先级的值越大,其优先级越低;某优先级的值越小,其优先级越高。也就是说,如果当前操作系统准备进行调度,当有两个任务处于就绪状态, 系统将优先执行优先级别高的任务。 μC/OS-II操作系统有两种调度方式:任务级任务调度和中断级任务调度,μC/OS-II操作系统在完成中断后允许进行新的调度,因此,μC/OS-II操作系统是可抢占性的,是强实时性操作系统,这是μC/OS-II操作系统内核的重要特性。 任务就绪表的结构 任务就绪表 (OSRdyTbl[ ]): uC/OS-II进行任务调度的依据 uC/OS-II在RAM中设立了一个记录表,系统中的每个任务都在这个表中占据一个位置,并用这个位置的状态(1或0)来表示任务是否处于就绪状态。 如何根据优先级查找就绪表具体位置? 只用6位2进制数表示0~63,64个任务 用高3位表示OSRyGrp的具体数据位,即数组元素的下标; 低3位表示具体数组元素的具体数据位! 例:已知某一个已经就绪的任务的优先级别prio=49,试判断应该在就绪表的哪一位置上置1。 49的二进制形式其低6位为110001,于是可知应该在OSRdyTbl[6]的D1位上置1,同时要把变量OSRdyGrp的D6位置1 优先级二进制码分配 更新就绪表时采用如下方法: 对OSRdyGrp和 OSRdyTbl[ptcb-OSTCBY]的修改算法如下: 获取最高优先级就绪任务 函数OS_SchedNew() 第3章 uC/OS-II任务调度与系统初始化 uC/OS-II任务级调度机制 uC/OS-II任务级任务调度 uC/OS-II中断级任务调度 uC/OS-II任务调度应用实例 任务级任务调度 任务级调度是指在非中断返回时进行的任务调度,一般发生在当前正在执行的任务因为时间延迟或者某个非中断引起的事件情况下,主要功能如下: 查找当前就绪表中最高优先级任务的优先级的值 调用OS_SchedNew()函数进行任务切换,即切换到新的任务,并执行; OS_Sched函数 任务切换 OS_TASK_SW() 将被挂起的任务寄存器入栈 将较高优先级任务的寄存器出栈 断点:被中止的任务的位置(指pc的值) 上下文:断点的数据,也即被中止的那一时刻的处理器相关寄存器的值。 任务级的任务切换OS_TASK_SW() 调用OS_TASK_SW()前的数据结构 保存当前CPU寄存器的值 保存当前CPU寄存器的值 重新装入要运行的任务 重新装入要运行的任务 任务切换OS_TASK_SW()的代码 调度的时机 有新任务被创建,并在就绪任务表中登程; 有任务被删除; 有处于等待状态的任务被唤醒; 由于异步事件的发生,在中断服务程序中激活了一个或多个任务; 正在运行的任务需要等待某个事件发生而进入等待状态; 正在运行的任务调用延时函数而自愿进入等待状态; 上述情况的发生都会导致任务就绪表发生变化,引起任务调度函数的执行。 调度器的加锁与解锁 修改任务优先级 调用函数OSTaskChangePrio(); 函数基本流程: 参数检查 条件检查 将OSTCBPrioTbl[]数组下标修改为两个参数的的成员,同时修改任务就绪表 如果该任务等待某一事件,则需要修改该事件的等代表 修改该任务的任务控制相关成员变量 第3章 uC/OS-II任务调度与系统初始化 uC/OS-II任务级调度机制 uC/OS-II任务级任务调度 uC/OS-II中断级任务调度 uC/OS-II任务

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档