技术贴-uC/OS-II中OSUnMapTbl的作用与原理

在uC/OS-II 2.86版本之前是支持64个任务,后面版本可以支持256个任务。为了简单起见从64个来描述。

在OSUnMapTbl之前我们先来了解以下几个变量

OSRdyTbl 任务就绪表,这个表实际上是一个数组,数组长度为64,分别与任务特权一一对应。

表.1

特权级 是否就绪
0 0
1 0
2 0
3 0
0
63 1

左:特权级 右:是否就绪

以上表格代表任务3和任务63处于就绪状态。任务调度器就会从定两个任务中选一个出来执行。那么任务调度器会根据特权值来选择。

那么接下来我们要来了解下OSRdyGrp(任务就绪组 )根据上面任务就绪表我们知道任务有64个特权级。我们就给每8个特权级划分为一组

表.2

0 1 7 0
0 15 8
8 1 63 56

从表.1来看特权级3和特权级63为就绪状态,特权级3处于第0组,特权级63处理于第7组。所以我们的OSRdyGrp值的二进制为 10000001b。

从10000001b来看最高特权的是不是在第0组。那么OSUnMapTbl的作用就来了。