专注在线职业教育25年
下载APP
小程序
希赛网小程序
导航

利用OS任务调度来实现嵌入式数据管理[2]

责编:hugoholmes 2012-03-19
资料领取

1.2  使任务进入空闲态

μC/OS通过任务就绪表OSRdyTbl[prio》3](prio代表任务优先级)中相应位清零使相应任务进入空闲态,当OSRdyTbl[prio》3]中的所有位都为零时,还需将OSRdyGrp的相应位清零,代表全组任务中没有一个任务进入就绪态。

1.3  查找当前处于就绪态的较高优先级任务

μC/OS采用查表法查找当前处于就绪态的较高优先级任务,它预先定义了数组OSUnMapTbl[]作为查找表,如下:

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, 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,

7, 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, 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

};

相应的查找程序如下:

High3=OSUnMapTbl[OSRdyGrp];//优先级高3位,即当前处于就绪态的较高优先级的任务的组号

Low3=OSUnMapTbl[OSRdyTbl[High3]];//优先级低3位

prio=(Hign3《3)+Low3;//获得当前处于就绪态的较高优先级的任务

例如:若OSRdyGrp的值为01101000b,则查得OSUnMapTbl[OSRdyGrp]的值是3,它对应于OSRdyGrp中的第3位置1(即当前处于就绪态的较高优先级任务处于第1组任务中);若OSRdyTbl[3]的值是11100100b,则查OSUnMapTbl[OSRdyTbl[3]]的值是2,则进入就绪态的较高任务的优先级prio=3×8+2=26.

从上文的计算可看出μC/OS查找当前较高优先级任务所花的时间为常数,与应用程序中建立的任务数无关,这个特性是本文实现新型嵌入式数据管理的关键。

[1]  [2]  [3]  [4]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!
相关阅读
查看更多

加群交流

公众号

客服咨询

考试资料

每日一练

咨询客服