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

互联网技术 责任编辑:hugoholmes 2012-03-19

摘要:1.2使任务进入空闲态μC/OS通过任务就绪表OSRdyTbl[prio》3](prio代表任务优先级)中相应位清零使相应任务进入空闲态,当OSRdyTbl[prio》3]中的所有位都为零时,还需将OSRdyGrp的相应位清零,代表全组任务中没有一个任务进入就绪态。1.3查找当前处于就绪态的较高优先级任务μC/OS采用查表法查找当前处于就绪态的较高优先级任务,


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]  

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

通信工程师备考资料免费领取

去领取

距离2025 通信工程师考试

还有
  • 0
  • 3
  • 7
专注在线职业教育24年

信息系统项目管理师

信息系统项目管理师

!
咨询在线老师!