ucos学习笔记01---OSUnMapTbl的理解
2008-10-10 01:11
302 查看
/*----------------------------------
ucos中的OSUnMapTbl,用来快速查询优先级。这个算法在ucos里面用的较多,比如后面的任务管理、任务间通信等都用到了。
每个任务的就绪态标志都放入就绪表中的,就绪表中有两个变量OSRdyGrp和OSRdyTbl[]。
在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。
就绪表OSRdyTbl[]的一个元素元素对应着一组任务,这个元素的每一位对应表示这一组的那个任务是否进入就绪态。
算法分析:寻找最高优先级任务的所在组 , 找一组8个中的那个优先级最高的
----------------------------------
计算出总优先级。
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];
prio = (y << 3) + x;
使任务进入就绪状态
OSRdyGrp |= OSMapTbl[prio >> 3];
OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07];
从就绪表中删除一个任务
if ((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0)
OSRdyGrp &= ~OSMapTbl[prio >> 3];
----------------------------------*/
//下面是生成OSUnMapTbl[256]的代码
#include <stdio.h>
int main(void)
{
int i,t,n;
int tab[256]={0};
for(i=0;i<8;i++)
for(t=1;(t<<i)<256;t++)
{
tab[t<<i]=i;
}
//output this tab
for(n=0;n<=0xff;n++)
{
if(n%0x10==0)
printf("/n");
printf("%3d" , tab
);
}
printf("/n");
}
ucos中的OSUnMapTbl,用来快速查询优先级。这个算法在ucos里面用的较多,比如后面的任务管理、任务间通信等都用到了。
每个任务的就绪态标志都放入就绪表中的,就绪表中有两个变量OSRdyGrp和OSRdyTbl[]。
在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。
就绪表OSRdyTbl[]的一个元素元素对应着一组任务,这个元素的每一位对应表示这一组的那个任务是否进入就绪态。
算法分析:寻找最高优先级任务的所在组 , 找一组8个中的那个优先级最高的
----------------------------------
计算出总优先级。
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];
prio = (y << 3) + x;
使任务进入就绪状态
OSRdyGrp |= OSMapTbl[prio >> 3];
OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07];
从就绪表中删除一个任务
if ((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0)
OSRdyGrp &= ~OSMapTbl[prio >> 3];
----------------------------------*/
//下面是生成OSUnMapTbl[256]的代码
#include <stdio.h>
int main(void)
{
int i,t,n;
int tab[256]={0};
for(i=0;i<8;i++)
for(t=1;(t<<i)<256;t++)
{
tab[t<<i]=i;
}
//output this tab
for(n=0;n<=0xff;n++)
{
if(n%0x10==0)
printf("/n");
printf("%3d" , tab
);
}
printf("/n");
}
相关文章推荐
- 数据结构概念理解的例子_学习笔记01
- 深入理解java虚拟机-学习笔记01
- [深入理解计算机系统 学习笔记] 01 系统漫游
- UCOS2学习笔记:对于信号量,互斥信号量,事件标志组的个人理解
- 【ASP.NET MVC 学习笔记】- 01 理解MVC模式
- Java学习笔记(26)--理解java的三大特性之继承
- 函数参数Windows程序设计_Chap01_起步_学习笔记
- cocos2dx 3.3 + lua 学习笔记(01)--- math库
- CNN学习笔记与理解
- Dotnet_c#循环学习笔记_01_Panel控件
- 学习笔记01--在MR中优化用户的代码
- 深入理解Java虚拟机-学习笔记-第一章-走近java
- PyQt5学习笔记01----第一个窗口
- Vert.x 3学习笔记---01
- Java多线程学习笔记——从Java JVM对多线程数据同步的一些理解
- C++字符串的使用学习笔记01
- python 学习笔记(01)
- Android(java)学习笔记121:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 理解
- Delphi 2010学习笔记(5)---数据类型(变量)---2011-01-18
- 学习 严蔚敏讲数据结构笔记01