表格下面只有就绪.doc

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
表格下面只有就绪 篇一:对任务就绪表的操作(将就绪任务状态填入就绪表) 对任务就绪表的操作(将就绪任务状态填入就绪表) 当每个就绪的任务都放入就绪表中时,就绪表就有有两个变量:OSRdyGrp、OSRdyTbl[]来表示每个任务的优先级。 上图为任务优先表的结构 例如: OSRdyGrp,就意味着OSRdyTbl[0],OSRdyTbl[2], OSRdyTbl[5]任务组中有任务就绪。 根据任务的优先级别查找任务在就绪表的位置 例:已知某一个已经就绪的任务优先级别为prio=30,试判断应该在就绪表的哪一位置上置1。 分析:由于优先级别是一个单字节的数字,而且最大值不会超过63,即二进因此,可以把优先级别看成是一个6位的二进制数,这样就可以用高3位(D5、D4、D3)来指明变量OSRdyGrp的具体数据位,并用来确定就绪表数组元素的下标;用低3位(D2、D1、D0)来指明该数组元素的具体数据位。 答:30的二进制形式其低6位为011110,于是可知应该在OSRdyTbl[3]的D6位上置1,同时要把变量OSRdyGrp的D3位置1。 对任务就绪表的操作——登记,注销 对于一个优先级为prio的任务,任务就绪表的登记操作可由如下代码实现: OSRdyGrp| = OSMapTbl[prio3]; OSRdyTbl[prio3] | = OSMapTbl[prio & 0x07]; 其中,OSMapTbl[]是uC/OS-II为加快运算速度定义的一个数组,各元素为: OSMapTbl[0] = 0000 0001B OSMapTbl[1] = 0000 0010B OSMapTbl[2] = 0000 0100B OSMapTbl[3] = 0000 1000B OSMapTbl[4] = 0001 0000B OSMapTbl[5] = 0010 0000B OSMapTbl[6] = 0100 0000B OSMapTbl[7] = 1000 0000B 同样,如果要使一个优先级为prio的任务脱离就绪态,则可使用如下代码: If((OSRdyTbl[prio3] &= ?OSMapTbl[prio & 0x07])==0) OSRdyGrp &= ?OSMapTbl[prio3]; 此段代码所执行的操作为将任务就绪表OSRdyTbl[prio3]相应元素的相应位清零,且当OSRdyTbl[prio3]中的所有位都为零时,即全组任务中没有一个进入就绪态时,OSRdyGrp的相应位才为零。 例:欲使优先级为12的任务进入和脱离就绪态,设置就绪表。 答:由题意得,任务优先级为12,。 进入就绪态: OSRdyGrp|=OSMapTbl[prio3];(OSMapTbl[1] = 0000 0010) OSRdyTbl[1]|=OSMapTbl[prio &0x07];(OSMapTbl[4] = 0001 0000) 脱离就绪态: ?OSMapTbl[prio & 0x07] = ?OSMapTbl[4] = ?OSMapTbl[prio3] = ?OSMapTbl[1] = If((OSRdyTbl[prio3] &= ?OSMapTbl[prio & 0x07]) == 0) (该行所有任务都是非就绪态)OSRdyGrp = OSRdyGrp & ?OSMapTbl[prio3] = 0 篇二:关于ucos就绪表 为了保证系统的实时性,在就绪表这一块,内核设计者设计了一种算法,这个算法在y 一定的时间里完成查找就绪表中最高优先级的任务(遍历就绪表来查找最高优先级的做法是不能保证实时性要求的)。关于就绪表,这里涉及到四个数据结构,分别是:OSRdyGrp、OSRdyTbl[]、OSMapTbl[]和 OSUnMapTbl[]。前两者是全局变量(INT8U),OSRdyTbl[]数组的大小取决于OS_LOWEST_PRIO。后面两个数组是静态成员,其值见下面的表格和代码: INT8U const OSUnMapTbl[] = { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x10 to 0x1F 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1,

文档评论(0)

raojun0012 + 关注
实名认证
内容提供者

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

认证主体饶**

1亿VIP精品文档

相关文档

相关课程推荐