ucosii中优先级查找原理
来源:互联网 发布:上瘾网络剧拍摄时间 编辑:程序博客网 时间:2024/06/05 05:51
//转自http://lanxifeng.blog.163.com/blog/static/104659688200971732745966/
OSUnMapTbl[]的原理
2009-08-17 15:27:45| 分类:μC/OS | 标签:|字号大中小 订阅
uCOS-II是一个多任务的操作系统,每个任务都是一个应用程序,它有自己的寄存器和堆栈空间,即任务控制块TCB(task control block),用来保存任务的状态,具体内容可以看TCB数据结构的定义OS_TCB。
所有的任务控制块组成一个单向任务链表OSTCBTbl[],每个任务控制块中有指针指向相邻的控制块,当任务一旦建立,空任务控制块指针OSTCBFreeList指向的任务控制块便赋给了该任务,对堆栈和寄存器初始化,然后OSTCBFreeList的值调整为指向下链表中下一个空的任务控制块。一旦任务被删除,任务控制块就还给空任务链表。
同任务相关的还有一个纪录任务优先级是否被占用的表OSTCBPrioTbl[],任务空闲时,放置一个非空指针在OSTCBPrioTbl[]中来保留该优先级。
任务就绪表,纪录当前就绪的任务,就绪表中把64个优先级的任务分成8组,优先级的1-3bit表示OSRdyTbl[]中组别OSRedyGrp,优先级的4-6bit表示每组中就绪任务的位置,当任务进入就绪态时,就绪表OSRdyTbl[]和OSRedyGrp中的相应元素的相应位也置位,任务切换时,在此表中,按优先级判定表OSUnMapTbl查找已经就绪的优先级最好的任务,并执行这个任务。
查找优先级最高的任务,使用的是优先级判定表OSUnMapTbl[],OSUnMapTbl[]表中的数值表示的是一个8bit的数据最低位为1的位置,例如:1000 0000 最低位为1的位置是在第7位,那么OSUnMapTbl[128]的值就是7;1000 0010 最低位为1的位置是在第1位,那么OSUnMapTbl[130]的值就是1;
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
};
表建立了,如何查询最高优先级呢?因为优先级的值越小,优先级越高,只需从OSRdyGrp中找到最低位置1的的那一组,再从该组中,查找最低位置1的位置,组合一下,就得到了最高的优先级。
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];
OSPrioHighRdy = (INT8U)((y << 3) + x);
- ucosii中优先级查找原理
- 【UCOSII】任务管理原理
- uCos中优先级判定表OSUnMapTbl原理
- uCos中优先级判定表OSUnMapTbl原理
- uCOS 中优先级判定表OSUnMapTbl原理
- 实现《ucosii原理与ARM应用程序设计》中ex2_3中遇到的错误
- ucosii
- ucosii
- ucosii
- UcosII
- 关于ucosii操作系统的音频播放任务优先级划分
- ucosII实时任务切换的原理
- UCOSII中的任务切换原理介绍
- ucosII 信号量的原理及应用
- 解读uCos中优先级判定表OSUnMapTbl原理
- 解读uCos中优先级判定表OSUnMapTbl原理(转载)
- 解读uCos中优先级判定表OSUnMapTbl原理
- 解读uCos中优先级判定表OSUnMapTbl原理
- 将 Shiro 作为应用的权限基础 一:shiro的整体架构
- 【Fiddler】如何运用Fiddler工具
- Android 堆栈攻击之 ARM 栈分析 + ARM汇编解读
- UVa:10827 Maximum sum on a torus
- Web前端黑客技术揭秘 笔记3 余弦老师的渗透利器
- ucosii中优先级查找原理
- 求二个数的正差值
- ubuntu 命令行打开pdf文件
- KM模版
- 单盘位小先锋 群晖DS112j家用NAS评测
- 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
- 求小贺的工资
- Jrebel 热部署
- 第九周上机项目3:个人所得税计算器