在ucos_II.H中定义INT8U const OSMapTbl[],在OS_CORE.C中定义OSMapTal的内容是什么?

 我来答
xjy786629795
2013-01-18
知道答主
回答量:3
采纳率:0%
帮助的人:4616
展开全部
任务的优先级以及就绪状态表,这是为了更方便地置位(自己总结的,仅供参考)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Safirst
2013-01-18 · TA获得超过975个赞
知道小有建树答主
回答量:1283
采纳率:50%
帮助的人:622万
展开全部
看书就知道了
追问
要能找到就不问了,你帮我回答好,我给你加分
追答

OSMapTbl[] 这个数组出现的目的是为了更方便的置位。说白点,使用OSMapTbl[index]的作用是更方便的把某个数值的第index位置1。比如:使任务进入就绪态的代码是:


OSRdyGrp  |= OSMapTbl[prio>>3];                   (1) 


OSRdyTbl[prio>>3] |= OSMapTbl[prio&0x07];   (2) 


先取prio(任务优先级)的“高三位”(这里的高三位是指不考虑prio的最高两位,剩下的六位中的高三位),“高三位”是OSRdyGrp的索引,就是说:“高三位”的值(0到7)指定OSRdyGrp(8位)中某一位置位,比如,“高三位”是111,即7,这样就把OSRdyGrp的第7位置1。再看代码(1),先通过prio>>3确定OSRdyGrp的哪一位应该置1(比如第7位),然后通过OSMapTbl[]表把这一位置1,其他位为0(比如OSMapTbl[7]=10000000),再通过位或操作就可以把OSRdyGrp的相应位(第7位)置1了。代码(2)是同样的道理。这里就说明了OSMapTbl[]数组的用处了。 


      使任务脱离就绪态要对某些位进行清0操作,这里也要用到OSMapTbl[]数组,原理是一样的。代码如下: 



  1. if ((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0)     
  2.     OSRdyGrp &= ~OSMapTbl[prio >> 3];   


 


第一行先对OSRdyTbl[]中某数据的某一位清0,然后进行判断,如果OSRdyTbl[]中这个数据为0(也主相当于这个数据的所有8位都已经清0了),再对OSRdyGrp的某位清0。 

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式