基于ARM的嵌入式系统设计-UCOS.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于ARM的嵌入式系统设计 uC/OS-Ⅱ介绍 主要内容 uC/OS历史 内核结构-任务以及调度机制 uC/OS的移植 什么是uC/OS u: Micro C:control uC/OS : 适合于小型控制系统的操作系统 小巧 实时性强 可移植性强 uC/OS历史 作者Jean J. Labrosse利用业余时间完成 最初的一篇介绍文章在《Embedded System Programming》1992年5月到6月期上连载,这是内核源代码的首次曝光。 1993年《实时内核uC/OS》出版 uC/OS 历史 uC/OS-II是一种基于优先级的可抢先的硬实时内核。 目前已经被移植到40多种不同结构的CPU上,运行在从8位到64位的各种系统之上。 通过了美国FAA认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上。 主要内容 uC/OS历史 内核结构-任务以及调度机制 uC/OS的移植 任务 同一时刻只有一个任务在运行 每个任务被赋予一定的优先级 每个任务都有自己的一套CPU寄存器和自己的栈空间。 任务控制块 任务 任务 任务的数据结构—任务控制块 任务控制块 OS_tcb,包括任务堆栈指针,状态,优先级,任务表位置,任务链表指针等。 所有的任务控制块,放在任务控制块数组中,并且连接成链表。 任务的状态 休眠态 就绪态 运行态 挂起态 被中断态 任务调度 uC/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权开始投入运行。 uC/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。 任务就绪表 任务就绪 根据优先级确定就绪表 假设优先级为12的任务进入就绪状态,12=1 100b,则 OSRdyTbl[1]的第4位置1,且OSRdyGrp的第1位置1,相应的 数学表达式为: OSRdyGrp |=0x02; OSRdyTbl[1] |=0x10; 而优先级为21的任务就绪21=10 101b,则OSRdyTbl[2]的第5位置1,且OSRdyGrp的第2位置1,相应的数学表达式为: OSRdyGrp |=0x04; OSRdyTbl[2] |=0x20; 任务就绪 从上面的计算我们可以得到:若第n位置1,则应该与2n 相或。uC/OS中,把2n的n=0-7的8个值 先计算好存在数组OSMapTbl[7]中,也就是: OSMapTbl[0] =20=0x1; OSMapTbl[1] =21=0x2; ? …… OSMapTbl[7] =27=0x80; 任务就绪 利用OSMapTbl,通过任务的识别号-优先级prio来设置任务在就绪组和就绪表数组中相应位置的数学式为: OSRdyGrp |=OSMapTbl[prio3]; OSRdyTbl[prio3] |=OSMapTbl[prio 0x07]; 假设优先级为12,1 100b OSRdyGrp |=0x02; OSRdyTbl[1] |=0x10; 确定最高优先级任务 两个关键: 优先级数分解为高三位和低三位分别确定; 高优先级有着小的优先级号 ; 确定最高优先级任务 通过OSRdyGrp值确定高3位,假设为0x24=100 100b, ---〉 OSRdyTbl[2] 和OSRdyTbl[5],高优先级为2 通过OSRdyTbl[2]的值来确定低3位, 假设为0x12=010 010b ,---〉第2个和第5个任务,取高优先级第2个 ----〉17 确定最高优先级任务 查表法 具有确定的时间,增加了系统的可预测性,uC/OS中所有的系统调用时间都是确定的 High3 =OSUnMapTbl[OSRdyGrp]; Low3 =OSUnMapTbl[OSRdyTbl[High3]]; Prio =(Hign33)+Low3; 查表 INT8U const OSUnMapTbl[] = { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2,

文档评论(0)

精品天地 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档