ucosii --任务就绪表
由任务就绪表OSRdyTbl和任务就绪组OSRdyGrb组成,OSRdyTbl每一个位都记录着一个任务的就绪状态,
0非就绪1就绪,OSRdyGrb是为了快速的找出当前的最高就绪任务而设置的,把就绪表中的八个任务状态分为 一组,当这个组中有就绪状态的任务时,就在OSRdyGrb中相应的位置1.
●就绪表登记任务
更改任务状态要做两个操作,一个事把任务就绪表中的相应位置1,一个事把相应的任务就绪组置1
代码:
OSRdyGrp|=OSMapTbl[prio>>3];
OSRdyTbl[prio>>3]|=OSMapTbl[prio&0x07];
第一个操作,prio>>3意思是除以prio/8,这样就正好是prio在任务就绪组中的第几位,然后为了方便给OSRdyGrp赋值,有一个OSMapTbl.
第二个操作prio>>3找到OSRdyTbl中第几组,然后prio&0x07,就是prio%8,找出在该组的第几位.
●删除就绪任务
删除就绪任务时首先给任务就绪表相应位置0,然后判断该组是否为零,意思是该任务组没有就绪任务了,然后给相应的任务就绪组置0;
if((OSRdyTbl[Prio>>3])&==~OSMapTbl[prio&0x07])==0)
OSRdyGrp|=~OSMapTbl[prio>>3];
●查找最高就绪任务(经典的以空间换时间)
①y=OSUnMapTb1[OSRdyGrp];
x=OSUnMapTbl[OSRdyTb1[y]];
prio=(y<<3)+x;
或②
y=OSUnMapTb1[OSRdyGrp];
OSPrioHighRdy = (INT8U)((y<<3)+OSUnMapTb1[OSRdyTb1[y]]);
这操作应该属于数学问题,用一个数组来枚举出现的结果.
ucosii --任务就绪表的更多相关文章
- UCOSii任务就绪表之OSUnMapTbl[16*16]的数组是如何得到的
我比较喜欢图,如下图: 图1: INT8U const OSUnMapTbl[]数组内的数据. 1.UCOSii的优先级相关内容 首先先介绍一个概念:优先级.UCOSii的优先级按倒叙排列,即优先级数 ...
- ucos任务优先级从64到256,任务就绪表的改变
Ucos在任务调度中经常使用的技术为任务就绪表,在之前的文章中使用的例子是低于64个优先级的任务就绪表查找方法,现在ucos将任务扩展到256优先级之后,任务就绪表的查找也做了一定的修改,今天来讲讲 ...
- ucos任务调度原理及任务就绪表
之前我们说到,系统在运行的时候会直接依靠任务的优先级来找到任务的控制块从而实现任务的调用切换等功能,那么接下来的问题就是,系统是怎么找到并确定某一个特定的最高优先级任务并确定他的优先级的呢 为了解决这 ...
- μC/OS-II 任务就绪表及任务调度
任务调度 多任务操作系统的核心工作就是任务调度. 所谓调度,就是通过一个算法在多个任务中确定该运行的任务,做这项工作的函数就叫做调度器. μC/OS-II 进行任务调度的思想是 "近似地每时 ...
- μC/OS中的任务就绪表
为了便于对就绪表的查找,μC/OSII又定义了一个数据类型为INT8U的变量OSRdyGrp, 并使该变量的每一位都对应OSRdyTbl[ ]的一个任务组(即数组的一个元素),如果某任务组中 有任务就 ...
- ucos-ii变量名称表
- 源码分析 ucosii/source 任务源码详细分析
分析源码: 得先学会读文档, 函数前边的 note :是了解该程序员的思想的途径.不得不重视 代码前边的 Notes,了解思想后,然后在分析代码时看他是如何具体实现的. 1. ucosii/sour ...
- ucos-ii的任务调度机制
1.在ucos-ii中,有这么几张表来管理任务. A.OSTCBPrioTbl[],其结构为OS_TCB指针的数组,其元素个数为64, 每一个元素对应一个任务的优先级,ucos-ii最多可以有64个任 ...
- uCos-II中任务的同步与通信
任务的同步与通信 任务间的同步 在多任务合作工作过程中,操作系统要解决两个问题: 各任务间应该具有一种互斥关系,即对某些共享资源,如果一个任务正在使用,则其他任务只能等待,等到该任务释放资源后,等待任 ...
随机推荐
- MySQL in or效率对比
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/60 考虑如下两个sql: select * from table ...
- 51nod 1203 jzplcm
长度为N的正整数序列S,有Q次询问,每次询问一段区间内所有数的lcm(即最小公倍数).由于答案可能很大,输出答案Mod 10^9 + 7. 例如:2 3 4 5,询问[1,3]区间的最小公倍数为2 ...
- jsDOM编程-拖拽层
页面样式代码: <!doctype html><html><head><meta http-equiv="content-type" co ...
- PHP判断手机号运营商(详细介绍附代码)
道理很简单,知道手机号规则 进行正则判断就可以 移动:134.135.136.137.138.139.150.151.157(TD).158.159.187.188 联通:130.131.132.15 ...
- Xampp配置本地域名及常见错误解决
本地域名配置 1.计算机-->C盘-->Windows-->System32-->drivers-->etc-->hosts 127.0.0.1 loc ...
- js必须掌握的基础
好多人想要学习前端……自学或者培训那么我们在学习过程中到底需要掌握那些基础知识呢!下面分类了JS中必备的知识也是必须要了解学会的!看一看你是否已经将JS的基础知识都了如指掌了呢? 事件: onmous ...
- Asp.net 不安全端口 解决chrome浏览器访问时提示:ERR_UNSAFE_PORT
https://blog.bbzhh.com/index.php/archives/136.html 想在vps做个测试,看看是否25端口屏蔽是否生效,于是起了一个小web服务在25端口做测试,但是使 ...
- 3D轮播切换特效 源码
这个3D轮播切换特效是我2017年2月份写的 当初我 刚接触HTML不久,现在把源码分享给大家 源码的注释超级清楚 . <!-- 声明文档类型:html 作用:符合w3c统一标准规范 每个浏览器 ...
- Android -- NestedScrolling滑动机制
1,如今NestedScrolling运用到很多地方了,要想好看一点的滑动变换,基本上就是使用这个来完成的,让我们来简单的了解一下. 2,NestedScrolling机制能够让父View和子View ...
- XML的解析(DOM以及SAX方式)
感谢http://blog.csdn.net/redarmy_chen/article/details/12951649(关于SAX解析)以及http://blog.csdn.net/zhangerq ...